2012-02-04 37 views
1

在Perl中的某個項目中,我寫了幾個「解析器」,它們允許我使用LWP :: UserAgent訪問網站。然而,我在一個網站上遇到了問題:它的行爲與我通過瀏覽器訪問網站的行爲完全相同,因爲它已關閉了Cookie,所以不是給我我想要的網頁,而是給我一個頁面,我必須打開cookie。我的腳本的整個代碼如下。有任何想法嗎?提前致謝。用Perl解析網站LWP :: UserAgent - 需要Cookies

(請注意,我看了看下面的網址,這似乎是解決我的問題,但不幸的是,我無法根據其建議,得到一個工作腳本:Cookies in perl lwp

use strict; 
use warnings; 
use LWP::UserAgent; 
use HTTP::Cookies; 
my $useragent = LWP::UserAgent->new; 
$useragent->cookie_jar(HTTP::Cookies->new); 
my $request = HTTP::Request->new(GET => "http://www.the-site-im-trying-to-parse.com"); 
my $response = $useragent->request($request); 
print "Content-type: text/html\n\n"; 
print $response->as_string; 

回答

1

有你考慮使用WWW :: Mechanize模塊?它默認會自動收集cookie。而且使用起來更容易一些,因爲有很多非常有用的包含的方法。

-1

嘗試建立cookie_jar臨時存儲(給它空hashref):

$useragent->cookie_jar({}); 
1

所有你做的是通過http下載的HTML數據,所以沒有瀏覽器交互,直到你決定要查看結果在一個。也就是說,HTTP服務器無法知道您的請求是否來自啓用了Cookie的客戶端。所以這樣做實際上不會做任何事情來改變結果。

WWW:機械化模塊對於輕鬆遍歷網站很有用,但它不能解決您面臨的問題。所以它實際上不會幫助您解決您遇到的問題。

更現實的是,它發生了什麼是有一些客戶端JavaScript代碼,一旦你下載文件並顯示在瀏覽器中,它不能正常工作。這可以是任何數量的事情,例如打破JavaScript代碼中實施的跨域策略。沒有提供你正在訪問的URL,這是不可能的。

+0

如果不是通過javascript,cookie通常是通過webbug(img)設置的 - 使用firefox livehttpheaders會告訴你 – obmib 2012-02-05 13:31:15

+0

我同意,但是當查看生成的HTML文件時(正如提問者所做的那樣)你在瀏覽器中看到的將是某種javascript計算的結果。 – GoldenNewby 2012-02-05 21:07:50

相關問題