使用LWP和Perl登录网站

3
作为一名经验不足的程序员,我想编写一个程序来登录我的课程网站并下载所有内容(讲座、作业等)。显然它是受密码保护的,所以我必须提供它。我对LWP::UserAgent等有一定的了解,并且知道我需要使用凭据。但我无法弄清楚如何进入下一页。我可以进入登录页面,但是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; 

响应中的内容与如果我没有传递任何凭据所得到的内容相同。显然我在这里缺少了什么....

还有一件事,就是我自己的课程网站好像没有唯一的URL。

3个回答

5
你可能想要使用WWW::Mechanize,它是LWP::UserAgent的子类,旨在更像一个浏览器,使你能够轻松地通过一个网站的页面进行导航,并且自动处理了cookie存储。

谢谢。再读一些!(我知道它在那里,但有时候我想这只是关于在正确的地方寻找) - msikd65

2

只有当网站使用HTTP基本身份验证时,才需要使用凭证(credentials)。在这种情况下,您不需要“登录”,只需在每个请求中传递凭据即可。

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


谢谢您的快速回复。我想我需要阅读关于HTTP和Web工作原理等方面的资料。 - msikd65

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接