为什么我的WWW :: Mechanize程序在尝试登录时会超时?

时间:2010-04-22 14:07:54

标签: perl https www-mechanize

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

我的问题是,我现在需要添加cookie吗?他们使用https?

这是添加cookie jar的正确方法吗?

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秒才能登录。

2 个答案:

答案 0 :(得分:3)

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

 $mech->timeout( $really_long_value );

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

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

至于cookie问题,只需在手动尝试时观看HTTP对话即可。做你的互动浏览器做的事情。如果它发送cookie,那就这样做。如果它使用不同形式的身份验证,请执行此操作,依此类推。当他们关闭80端口时,他们可能已经改变了更多的方案。

答案 1 :(得分:1)

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

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

此外,请确保您的所有网址都以https开头。经过3天的调试后我发现了。