有些没经验的程序员在这里尝试编写程序登录我的课程网站并下载所有内容(讲座家庭作业等)。显然它是一个受密码保护的网站,所以我必须给它。我理解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;
来自回复的内容与我所获得的内容相同,就像我没有通过任何凭据一样。显然我在这里错过了一些东西......
哦,另外一件事,据我所知,我自己的课程网站没有唯一的网址。
答案 0 :(得分:5)
您可能希望使用WWW::Mechanize,LWP :: UserAgent的子类,其设计更像浏览器,允许您浏览已经为您处理的cookie存储的网站页面。< / p>
答案 1 :(得分:2)
如果网站使用HTTP基本身份验证,您只能使用credentials
,在这种情况下,您不会“登录”,只需在每次请求时传递凭据。
如果网站具有基于表单的登录系统,那么您需要使用cookie_jar
并使用其预期的任何数据请求表单的操作URI。
答案 2 :(得分: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;
}