在 Perl 中使用 LWP 登录网站

Posted

技术标签:

【中文标题】在 Perl 中使用 LWP 登录网站【英文标题】:Loggin into website with LWP and Perl 【发布时间】:2011-05-20 15:28:34 【问题描述】:

这里有点缺乏经验的程序员试图编写一个程序来登录我的课程站点并下载所有内容(讲座作业等)。显然这是一个受密码保护的网站,所以我必须给它。我非常了解 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; 

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

也谢谢。再次阅读更多内容! (我知道它就在那里,但有时我猜这都是为了找对地方)【参考方案2】:

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

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

【讨论】:

感谢您的快速回复。我想我需要阅读 HTTP 以及网络如何工作等。【参考方案3】:
#!/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;

【讨论】:

以上是关于在 Perl 中使用 LWP 登录网站的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 perl(和 JS?)登录这个网站?

(perl) 终端 (Mac) 如何在 @INC 中找到 LWP...?

提高 LWP::Simple perl 性能

Perl LWP::Simple::getstore 如何检查文件是不是存在于目标目录中

Perl LWP::UserAgent 错误处理 UTF-8 响应

使用 Perl HTTP::Response 和 LWP 代理 HTTP 请求的更好方法?