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; 

来自响应的内容与我得到的内容相同,就好像我没有通过任何凭据一样。显然我在这里遗漏了一些东西....

哦,另一件事,据我所知,我自己的课程网站没有唯一的网址。

4

3 回答 3

5

您可能希望使用WWW::Mechanize,它是 LWP::UserAgent 的子类,旨在更像浏览器,允许您浏览网站的页面,并已为您处理好 cookie 存储。

于 2011-05-20T15:43:23.780 回答
2

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

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

于 2011-05-20T15:32:54.347 回答
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;
}
于 2015-01-09T11:43:59.593 回答