8

我有一个 Perl 脚本,它使用LWP::UserAgent下载一个网页,然后使用正则表达式处理该网页。问题是网页的常规 HTML 部分没有返回到 LWP::UserAgent,因为该站点识别出浏览器没有安装 Flash,而是返回 HTML 提示我们下载 Flash 而不是下载相应的 HTML我们需要解析。

我怎样才能让 LWP::UserAgent 看起来已经安装了 flash 到我们请求页面的 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);

在此先感谢您的帮助!

4

3 回答 3

1

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

于 2010-02-06T12:57:11.807 回答
0

该站点可能正在测试是否使用 javascript 安装了 flash。通常,此测试仅在客户端进行,因此不应影响页面。但也许他们正在触发一个异步请求,告诉服务器闪存已安装。要对此进行测试,您需要下载 TamperData,从工具菜单加载 TamperData 窗口并刷新页面。该窗口将向您显示所有被触发的请求,您可以检查它们。如果有类似http://whatever.com/flash_test.php?flash_installed=true的请求,那么您可以使用 LWP 重播此请求。

另一种选择是反编译 Flash 应用程序。这很容易做到,通常您会获得包括代码注释在内的完整源代码,这里有一个免费试用版

于 2010-02-05T23:02:22.843 回答
0

@Michael & @dma_k 都是正确的。服务器没有检查 LWP::UserAgent 是否安装了 flash。相反,由于某种原因,在我们尝试调试脚本时,返回的内容没有被正确转储。不幸的是,我们没有找到解决此问题的方法,但经过反复试验,我们想出了如何从页面中提取适当的字段。很抱歉,这个问题并没有真正的正确答案。

于 2010-02-12T00:27:48.053 回答