2013-06-12 39 views
0

我试图刮网站,其中有某种闪光的插件,加载数据后,我检索HTML的。在页面中收到以下对象网站在网站刮尝试用flash插件

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="250" HEIGHT="20" id="Preloader"><PARAM NAME="movie" VALUE="/images/preloader.swf"> 
     <PARAM NAME="quality" VALUE="high"> 
     <PARAM NAME**strong text**="bgcolor" VALUE="#FFFFFF"><EMBED src="/images/preloader.swf" quality="high" bgcolor="#FFFFFF" WIDTH="250" HEIGHT="20" NAME="Preloader" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT> 

我试图找到在wireshark上收到的数据,但没有运气。我对这个Flash插件的知识或它的工作原理是零。我猜最坏的情况下,我将无法做到这一点。

HttpWebRequest mainRequest = (HttpWebRequest)(WebRequest.Create(URL)); 
      mainRequest.Method = "GET"; 
      mainRequest.Proxy = null; 
      WebResponse mainResponse = mainRequest.GetResponse(); 
      StreamReader dataReader = new StreamReader(mainResponse.GetResponseStream(), System.Text.Encoding.UTF8); 
      string data = dataReader.ReadToEnd(); 
      dataReader.Close(); 
      mainResponse.Close(); 
      return data; 

有谁知道一种方法,我可以收到此数据,或使WebResponse的等待接收前的数据将被注入到HTML。任何帮助将不胜感激。

更新: 看来我可能已经用闪光物体将枪略微跳了一下。我认为这只是表格填充时的加载动画。我一直在用小提琴来看看发生了什么。该页面在加载div和包含在其中的flash对象的请求之后返回。几秒钟后,当数据准备就绪时,数据将返回另一个页面。从我可以记住的(即时不在家,所以现在不能确认)新页面与原始页面具有相同的请求标题。 Theres没有json或ajax数据在提琴手中。 Theres没有脚本在客户端上导致刷新,我可以看到。我不明白是什么导致这个更新。

我简单地看了一下网页浏览器对象,但我想这将是相当的性能打击时,即时通讯约200页,目前需要一分钟左右。稍后我将尝试使用amf查看器来确认flash对象不是更新的来源。

即时猜测服务器引起此页面被重新发送时,它具有表准备。 如果服务器正在查找加载div并将其替换为数据表,是否会导致整个页面被重新发送?或者不会显示在ajax/json数据中?如果是重新发送数据的服务器,我怎样才能保持响应打开,直到准备好发送新页面为止?

谢谢。 JM。

回答

1

如果内容被动态加载到Flash影片它很可能通过标准的HTTP请求发生。 Wire Shark对于检测像这样的东西可能有点矫枉过正。我建议使用捕获HTTP的实用程序,例如Charles,HttpFox或屏幕刮板。使用其中一种工具,观察内容加载时发生的HTTP请求。一旦你确定了哪一个请求,你很可能只是将它复制到你的代码中。这就是说,我也看到了一些情况(虽然不是很常见),其中加载到Flash电影中的数据是用二进制协议完成的,这使得事情变得更加困难。 AMF通常是这些情况下使用的协议。 Charles代理将检测这个协议,所以这可能是在这种情况下使用的工具。前一阵子,我写了一篇关于extracting data that's delivered via AMF的博客文章。它涉及一个Java库,但是您可能能够在.NET中找到相同的东西。

+0

我发现我可以添加一个参数到链接来获取这个信息加载之前,它发送给我。我已经标记了这个答案是正确的,因为这是开始我的过程到最终的解决方案,虽然所有的答案都非常有帮助,谢谢:) – JMG

0

由于Flash内容未运行,因此您无法使用普通的HttpWebRequest。你找回的回应只是HTML。它需要一个浏览器(或类似浏览器的对象)来实际执行,加载该对象并下载内容。我知道有用于执行Javascript的库,但我不知道任何可让您在浏览器之外运行Flash插件的任何内容。

您最好使用WebBrowser对象。但即使它会执行Flash内容(我真的不知道它会如何),但您可能无法访问它。你必须看看DOM并看看。

0

使用Firebug和/或TamperData,像往常一样使用flash加载页面,并等到Flash使用HTTP POST/GET获取数据。

Flash有三个选项来获得数据:

  • 套接字
  • HTTP GET
  • HTTP POST

你可以欺骗这件事的任何一天。只是要确保您的申请包含所有这小东西:

  • 方法(GET或POST)
  • 饼干
  • 表单值(为什么会话状态,例如?)
  • URL引荐
  • 用户代理
  • 自定义HTTP头? (有些人可能会把它放在HTTP请求中,所以没有人可以“欺骗”服务器)

这可能会使数据的响应与默认的html错误页面有所不同。

最后一件事: 如果内容是通过HTTPS传递的,那么不要担心,它只是一个额外的层,但仍然有可能。

如果内容是通过套接字传递的,那就把它忘掉。

+0

是的,我确定我可以欺骗它,我只需要了解它是如何工作的第一。我已经更新了这个问题,因为我不认为闪存对象是问题,它只是一个加载动画。谢谢:) – JMG

+0

不管怎么说,谁发出请求将通过TamperData或Firebug。注意隐藏的iFrames。您必须将此原则应用于任何http请求。会话状态是最难以欺骗的,但它是可能的。 –