2011-05-20 86 views
3

这里有点缺乏经验的程序员试图编写程序登录我的课程网站并下载所有内容(讲座作业等)。显然这是一个密码保护网站,所以我必须给它。我理解LWP :: UserAgent和类似的,并且我需要使用凭据。我无法弄清楚的是如何进入下一页。我可以登录,但perl如何获得我的登录结果?用LWP和Perl登录网站

代码示例(我明明拉出日志信息):

use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
my $url = 'login URL'; 
$ua -> credentials(
    $url, 
    '', 
    'user', 
    'pass' 
); 
my $response = $ua ->get($url); 
print $response->content; 

内容从反应是同样内容我会得到,如果我没有通过任何凭据。很明显,我在这里失去了一些东西....

哦,我自己的课程网站没有一个独特的网址,据我所知。

回答

5

您可能希望使用WWW::Mechanize,它是LWP :: UserAgent的一个子类,设计用来更像浏览器,允许您浏览网页,并使用已经为您保管的cookie存储。

+0

谢谢。再读一遍! (我知道它在那里,但有时候我会猜测它在寻找正确的地方) – msikd65 2011-05-20 16:06:51

2

如果站点使用HTTP基本身份验证,则只使用credentials,在这种情况下,您不会“登录”,只需将凭据传递给每个请求即可。

如果该网站具有基于表单的登录系统,那么您需要使用cookie_jar并请求表单的操作URI以及它期望的任何数据。

+0

感谢您的快速回复。我想我需要阅读HTTP和网络的工作原理等。 – msikd65 2011-05-20 16:05:34

0
#!/usr/bin/perl 

use LWP::UserAgent; 
use HTTP::Cookies; 

my $ua=LWP::UserAgent->new(timeout => 20); 
    $ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.8) Gecko/20100202 MRA 5.5 (build 02842) Firefox/3.5.8'); 
    $ua->requests_redirectable(0); 

my $cook = HTTP::Cookies->new; 
    $ua->cookie_jar($cook); 

print = requester('http://urlexample/login.php', 'login=yourlogin&password=pass')->as_string; 

sub requester 
{ 
    my $type = 'GET'; 
    if($_[1]){$type = 'POST'} 
    my $req = HTTP::Request->new($type => $_[0]); 
    $req->content_type('application/x-www-form-urlencoded; charset=UTF-8'); 
    if($_[1]){$req->content($_[1])} 
    my $res = $ua->request($req); 
    return $res; 
}