1

我正在屏幕抓取的站点(我有信誉)最近更改了他们的服务器并阻止了端口 80。我以为我可以将端口 443 用于 https,但我现在收到超时错误。我只是创建一个新的 WWW::Mechanize 对象并使用 get() 来抓取网站。

我的问题是,既然他们使用 https,我是否需要添加 cookie?

这是添加饼干罐的正确方法吗?

my $agent = WWW::Mechanize->new();

$agent->agent('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100407 Ubuntu/9.10 (karmic) Firefox/3.6.3');

# we need cookies
$agent->cookie_jar(HTTP::Cookies->new);

这是错误:

正在尝试登录... 2010-04-22
14:00:08 发布
https://theURL/j_security_check时出错:
已超过登录过程允许的时间。如果您想继续,您必须单击两次并重新单击您请求的链接,或者关闭并重新打开您的浏览器 lib/mypackage.pm 第 40 行

这甚至是cookie问题吗?

有没有办法增加登录时间,即使我通过浏览器登录网站,感觉在我登录之前也需要 60 到 90 秒。

4

2 回答 2

3

WWW::Mechanize建立在LWP::UserAgent之上,因此您可以使用 LWP::UserAgent 方法。默认的超时时间是 180 秒,这已经是非常长的时间了,但是您可以使用以下方法将其更改为您喜欢的任何值timeout

 $mech->timeout( $really_long_value );

此超时不是总请求时间,而是用户代理将容忍的套接字上的空闲时间。如果在这段时间内没有收到任何交互,则请求应该失败。

但是,听起来服务器可能有问题,因为即使您手动执行它也需要很长时间。您可能会向运行该站点的任何人提及这一点。该错误消息非常可疑。如果没有有关服务器等的更多详细信息,很难告诉您发生了什么。

至于 cookie 的问题,请在手动尝试时观看 HTTP 对话。做你的交互式浏览器所做的一切。如果它发送 cookie,请执行此操作。如果它使用不同形式的身份验证,请执行此操作,依此类推。当他们关闭端口 80 时,他们的改变可能比方案更多。

于 2010-04-22T15:36:56.527 回答
1

这是一篇旧文章,但我认为您可能需要确保加载 SSL 支持,因为默认情况下通常不启用它。

use WWW::Mechanize;
require IO::Socket::SSL;

此外,请确保您的所有 URL 都以 https 开头。经过三天的调试,我发现了这一点。

于 2011-03-01T19:44:24.153 回答