【问题标题】:How can I make LWP::UserAgent appear to have Flash installed?如何使 LWP::UserAgent 看起来安装了 Flash?
【发布时间】:2011-01-13 17:37:48
【问题描述】:

我有一个 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);

提前感谢您的帮助!

【问题讨论】:

  • “下载一个网页,然后使用正则表达式进行处理”。哦,伙计。
  • 查看此页面:stackoverflow.com/questions/2124560/… 我在哪里回答这个问题。简而言之,如果检测是在 header Accept/User-Agent 中完成的,这很简单。如果检测是使用 flash 或 javascript 完成的,则可能会更加困难。无论哪种方式,您都需要知道要发送到服务器的内容以及返回的内容。

标签: flash perl lwp-useragent


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多