2012-02-04 66 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