2010-02-05 56 views
8

我有一个Perl脚本,它使用LWP::UserAgent下载一个网页,然后使用正则表达式进行处理。问题在于网页中普通的HTML部分没有被返回到LWP :: UserAgent,因为该网站认识到浏览器没有安装Flash,而是返回HTML提示我们下载Flash,而不是适当的HTML我们需要解析。如何让LWP :: UserAgent显示安装Flash?

我怎样才能让LWP :: UserAgent的出现有安装到我们从请求页面的Web服务器闪存?我正在使用以下代码来初始化LWP :: UserAgent:

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new(cookie_jar => { },requests_redirectable => [ ]); 
$ua->agent('Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:9.9.9.9) Gecko/20079999 Firefox/2.0.0.1'); 
$ua->timeout(10); 

在此先感谢您的帮助!

+0

“下载一个网页,然后使用正则表达式进行处理”。天啊。 – jrockway 2010-02-07 00:33:51

+0

看看这个页面:http://stackoverflow.com/questions/2124560/how-can-i-make-lwpuseragent-look-like-another-browser/2124775#2124775 哪里我回答这个问题。总之,如果在头Accept/User-Agent中完成检测,这很简单。如果使用flash或javascript完成检测,则可能会更困难。无论哪种方式,你需要知道你发送给服务器的是什么,以及你回来了什么。 – 2010-02-07 19:40:57

回答

0

两个@迈克尔& @dma_k是正确的。服务器没有检查LWP :: UserAgent是否安装了Flash。相反,出于某种原因,在我们尝试调试脚本时,返回的内容未被正确转储。不幸的是,我们没有找到解决这个问题的方法,但经过一些试验和错误之后,我们想出了如何从页面中提取适当的字段。对不起,这一个没有真正的答案。

0

该网站可能正在测试Flash是否使用JavaScript安装。通常这个测试只是客户端,并且不应该影响页面。但也许他们正在发出一个异步请求,告诉服务器安装了闪存。为了测试这个,你需要下载TamperData,从工具菜单中加载Ta​​mperData窗口并刷新页面。该窗口将显示所有正在被解雇的请求,并且您可以检查它们。如果有一些请求,如http://whatever.com/flash_test.php?flash_installed=true,则可以使用LWP重播此请求。

另一种选择是反编译Flash应用程序。这很容易做到,通常你会得到完整的源代码,包括代码注释,这里是一个free trial

+0

FireBug在这里也不错。重要的是捕获客户端和服务器之间的对话,以便重现相关的位。 – Ether 2010-02-05 23:05:40

+0

是的,似乎是这种情况:http://www.adobe.com/support/flash/how/shock/javaplugs/javaplugs02.html – ziya 2010-02-06 17:37:51

+0

是的,萤火虫是伟大的,但它比篡改数据给你更少的交通信息。 – rook 2010-02-06 19:32:24

1

我会建议你使用Firebug为 - 很不错的,功能强大的插件为FF。我同意迈克尔的观点,服务器只能从发送给他的头文件或脚本中学习关于客户端的信息,该头文件在客户端上运行,并且可以与服务器(JavaScript,Flex,...)交谈。对于JavaScript的情况下,你可以尝试在FF临时禁用它,并尝试重新加载页面:如果服务器回答你与LWP相同,那么你知道答案。

相关问题