我已经整天都在寻找答案:
我正在使用Perl和LWP :: UserAgent和HTTP :: Cookies。
我的问题是我无法通过基于cookie的年龄检查。
在Perl中我使用此代码:
my $browser = LWP::UserAgent->new;
my $resp = $browser->get( $url, 'User-Agent' => 'MySpider/1.0' );
#Cookie Setup
my $cookies = HTTP::Cookies->new();
$cookies->set_cookie(1,'age_check', '1','/','.example.com/', 80, ,0,3354512128, 0);
$browser->cookie_jar($cookies);
网站正在使用JavaScript设置Cookie
function saveSplash(domain) {
var expDate = new Date();
expDate.setTime(expDate.getTime()+(1*24*3600*1000));
setCookie("age_check", 1, expDate, '/', domain);
setCookie("screen_width", getScreenWidth(), expDate, '/', domain);
}
这是我的浏览器保存的Cookie:
age_check
1
example.com/
1088
3354512128
30140182
2646218624
30139981
知道我做错了吗?
先谢谢你们!
答案 0 :(得分:1)
我发现您set_cookie
电话有两个问题。首先,域名应为".example.com"
而不是斜线;斜杠在path参数中指定。其次,你缺少一个path_spec参数的值,所以你为discard(0)指定的值被用于maxage,这导致一个过期的cookie。
答案 1 :(得分:0)
(更新:非常想念。)
我希望你没有真正花一整天的时间。 :( Google上LWP::UserAgent JavaScript的第一个结果是Handling Javascript with LWP::UserAgent,它提供了一个妙语:它不支持JavaScript。但有几种选择。
检查CPAN上的Mechanize JavaScript。它会导致WWW::Mechanize::Firefox和WWW::Mechanize::Plugin::JavaScript。还有WWW::Selenium的脚本,这有点棘手,但完全可以模拟浏览器,因为它确实在运行浏览器。
Upate:忘了与Mech :: Plugin :: JavaScript有关的WWW::Scripter。