2010-04-22 45 views
1

我屏幕抓取的網站最近更改了他們的服務器並阻止了端口80.我認爲我可以使用端口443進行https,但現在我得到一個超時錯誤。我只是創建一個新的WWW :: Mechanize對象,並使用get()來刮取該網站。爲什麼我的WWW :: Mechanize程序在嘗試登錄時超時?

我的問題是,我是否需要添加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); 

這是錯誤:

Trying to log in... 2010-04-22
14:00:08 Error POSTing
https://theURL/j_security_check :
The time allowed for the login process has been exceeded. If you wish to continue you must either click back twice and re-click the link you requested or close and re-open your browser at lib/mypackage.pm line 40

這甚至一個cookie的問題?

是否有增加的登錄時間的方式,即使我登錄到該網站通過它感覺像它需要一個良好的60至90秒我登錄之前的瀏覽器。

回答

3

WWW::Mechanize是建立在之上LWP::UserAgent,所以你可以使用LWP :: UserAgent方法。默認的超時時間爲180秒,這已經是非常長的,但你可以改變它是通過使用timeout方法喜歡的任何值:

$mech->timeout($really_long_value); 

此超時是不是總請求時間,但閒置時間在用戶代理將容忍的套接字上。如果在該時間內沒有收到任何交互,請求將失敗。

但是,它聽起來像服務器可能有問題,因爲它需要很長時間,即使您手動執行它。你可能會提到這一點,誰運行該網站。該錯誤消息非常可疑。沒有關於服務器等的更多細節,很難告訴你發生了什麼事情。

至於cookie問題,只需手動嘗試時觀看HTTP對話。做任何你的交互式瀏覽器。如果它發送cookie,那就做。如果它使用不同形式的身份驗證,請執行此操作,依此類推。當他們關閉端口80時,他們可能已經改變了超過計劃。

1

這是一篇舊文章,但我認爲您可能需要確保SSL支持已加載,因爲默認情況下它通常不會啓用。

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

此外,請確保您的所有網址都以https開頭。我經過3天的調試才發現。

相關問題