我有一个使用LWP::UserAgent下载网页的Perl脚本,然后使用正则表达式处理该网页。问题是网页的常规HTML部分没有返回给LWP :: UserAgent,因为网站认识到浏览器没有安装Flash,而是返回HTML,提示我们下载Flash而不是相应的HTML我们需要解析。
如何让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 :(得分:1)
我建议您使用Firebug - 非常好用且功能强大的插件用于FF。我同意迈克尔的观点,服务器只能从发送给他的标题或者从客户端运行的脚本中学习有关客户端的信息,并且可以与服务器(JavaScript,Flex,...)通信。对于JavaScript情况,您可以尝试在FF临时禁用它并尝试重新加载页面:如果服务器回答您与LWP相同,那么您就知道答案。
答案 1 :(得分:0)
该网站可能正在测试是否使用javascript安装了Flash。通常此测试仅在客户端,并且不应影响页面。但也许他们正在发出异步请求,告诉服务器安装了闪存。要测试这一点,您需要下载TamperData,从工具菜单中加载TamperData窗口并刷新页面。该窗口将显示所有被触发的请求,您可以检查它们。如果有http://whatever.com/flash_test.php?flash_installed=true之类的请求,那么您可以使用LWP重播此请求。
另一种选择是反编译Flash应用程序。这很容易做到,通常你会得到完整的资源,包括代码注释,这里是free trial。
答案 2 :(得分:0)
@Michael& @dma_k是正确的。服务器没有检查LWP :: UserAgent是否安装了闪存。相反,由于某种原因,在我们尝试调试脚本时,未正确转储返回的内容。不幸的是,我们没有找到解决这个问题的方法,但经过一些试验和错误后,我们想出了如何从页面中提取相应的字段。很抱歉,这个答案确实没有。