我已经用下面的代码登录了。现在我一天只能做一次。然后我无法登录,但在响应中获得登录页面。但当我从下面的代码打印$reqstr并将其粘贴到浏览器(如火狐)时,我就可以登录了。Wget不能工作,不能工作。只有普通的浏览器。有时,我似乎登录了,但只得到了这样的内容:
"<html>\cJ<head>\cJ\cI<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"><meta http-equiv=\"expires\" content=\"0\"><meta http-equiv=\"pragma\" content=\"no-cache\">\cJ\cI<meta http-equiv=\"refresh\" content=\"0; URL='https://www.address.com/'\">\cJ</head>\cJ</html>\cJ"我还注意到,虽然我不能登录,但我在调试器中获得了这一部分:
_uri_canonical' => URI::https=SCALAR(0x17dad28)
-> REUSED_ADDRESS
'handlers' => HASH(0x22dc0c0)
'response_data' => ARRAY(0x22ee8b8)
0 HASH(0x22d9a48)
'callback' => CODE(0x22dba30)
-> &LWP::UserAgent::__ANON__[/usr/lib/perl5/vendor_perl/5.10.0/LWP/UserAgent.pm:682] in /usr/lib/perl5/vendor_perl/5.10.0/LWP/UserAgent.pm:679-682
1 HASH(0x22eea08)
'callback' => CODE(0x22d9cb8)
-> &LWP::Protocol::__ANON__[/usr/lib/perl5/vendor_perl/5.10.0/LWP/Protocol.pm:138] in /usr/lib/perl5/vendor_perl/5.10.0/LWP/Protocol.pm:135-138有什么线索吗?
代码如下:
my $b = LWP::UserAgent->new(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/31.2.0',);
my $cookie_jar = HTTP::Cookies->new(
file => 'lwp_cookies.txt',
autosave => 1,
ignore_discard => 1,
);
$cookie_jar->clear;
$cookie_jar->clear_temporary_cookies;
$b->cookie_jar($cookie_jar);
my $url = "https://www.address.com";
my $r = $b->get($url);
$r->decoded_content =~ /FORM ACTION="(.*?)" METHOD/msgi;
my $a = "$url$1";
print $a."\n";
my $reqstr = $a."&LoginAction=Login&Number=55555&KPassword=passw&UserID=uid";
my $req = HTTP::Request->new(POST => $reqstr);
$req->header('Host', 'www.address.com');
$req->header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0');
$req->header('Connection', 'keep-alive');
$req->header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
my $c = $b->request($req);发布于 2014-12-27 03:51:33
您需要重新请求该页面,并通过LWP::UserAgent的referer()添加推荐人(如果您不执着于该模块,请参阅我的第二个答案)。
sub login { # Code not tested and not really compilable, just a stub for you
my (@other_args, $url, $referrer_url) = @_;
# Add your login code from the question, up to calling $b->request()
$req->referer($referrer_url) if $referrer_url;
my $c = $b->request($req);
return $c; # Or return the response?
}
my $result1 = login($original_login_url); #first try
# Obtain the redirect_url from the response.
# If it was a 301 redirect, you can do it via
# my @redirects = $response->redirects();
my $referrer_url = $original_login_url;
my $result2 = login($redirect_url, $referrer_url);参考文献:
发布于 2014-12-27 03:57:28
如果你不是一心想使用LWP::UserAgent,那就改用WWW::Mechanize。
WWW::Mechanize::Plugin::FollowMetaRedirect。概要相当简短,而且切中要害:使用WWW::Mechanize;使用WWW::Mechanize::Plugin::FollowMetaRedirect;my $mech =WWW::Mechanize>new;$mech->get( $url );$mech->follow_meta_redirect;#可选的,跳过模拟等待时间$mech->follow_
(基本上,使用regex shudder解析返回的内容以提取刷新URL,并获得该URL。根据我的另一个回答,您可能需要添加referrer标题(
https://stackoverflow.com/questions/27634180
复制相似问题