【问题标题】:Flash AS3 read proxy server response with URLLoaderFlash AS3 使用 URLLoader 读取代理服务器响应
【发布时间】:2016-12-26 12:08:59
【问题描述】:

我在带有代理服务器的 LAN 网络中运行嵌入式闪存“swf”。代理服务器中断一些 url 并返回我的使用信息。我正在尝试通过发送这些 url 来访问这些信息。我可以在 firebug 中看到这个流量,但 URLLoader 似乎没有读取它。 Complete 事件或进度事件都不会被触发。我也尝试了带计时器的 URLStream,但 availableBytes 始终为零。是否可以读取此信息?

  private var getLoader:URLLoader = new URLLoader();
  private var sendRequest:URLRequest = new URLRequest();
  public function XDomain() {
   sendRequest= new URLRequest("requesturl");
   getLoader.addEventListener(Event.COMPLETE, eventHandler);
   getLoader.addEventListener(ProgressEvent.PROGRESS,eventHandler2);
   getLoader.load(sendRequest);
  }
  private function eventHandler(event:Event):void {
    trace("running");
  }
  private function eventHandler2(event:ProgressEvent):void {
   trace("runninhg progresss");
  }

提前致谢 // 编辑:我遇到了这个安全错误

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

【问题讨论】:

  • 请听一下 SecurityErrorEvents 和 HTTPStatusEvents 看看它说了什么。
  • @Jacob HTTPStatusEvent 侦听器阻止了我的代码。我缺少什么吗? //getLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, httpHandler);// .trace 之后这个没有运行。
  • “带有计时器的 URLStream” 为什么???如果你让它自然工作,没有计时器打断,会有结果吗? URLStream 是您最好的选择,因为它提供对服务器响应的原始访问。如果仍然失败,请显示您的 URLStream 代码或提供重现您的问题的可测试链接。
  • 没有任何事件被触发,这就是为什么我使用计时器返回 getLoader.bytesAvailable 。我想它不会做任何事情。
  • 关于您的代码中有import flash.events.*; 的事件?添加它有帮助吗? not running trace 在 httpHandler 函数中对吗?...无论如何URLLoader 本身不会向您显示任何服务器的响应文本。告诉我你是如何尝试URLStream 的(简短的例子,可在我们自己的编译器中测试)。我正在努力让它在我自己的测试中工作,所以要么你的 URLStream 代码是错误的,要么分享一个指向疯狂服务器的示例/可测试链接。

标签: actionscript-3 flash urlloader urlstream


【解决方案1】:

“但是 URLLoader 似乎没有读取它...”

使用URLStream(没有计时器,因为这甚至可以实现什么?)到达链接并在相关的progressEvent中使用readUTFBytes获取该链接服务器给出的任何文本响应数据。使用 progressEvent 还可以检查任何接收到的字节的大小(该事件多次触发,获得 64kb 数据包,直到下载完整数据)。

关于错误 #2048:
URLloader 是视觉数据(jpg、png、swf、文本)的解码器,但对于非文本数据,它需要 跨域。 xml 存在于您从中访问 swf 的另一台服务器上(双方还必须具有匹配的相同 httphttps。绕过此问题的最佳方法是将字节加载到字节数组(通过 URLStream 但progressEvents 现在应该写入您的字节数组)然后使用URLLoader.loadBytes( yourSWFBytes );

【讨论】:

  • 感谢您的回复。 URLStream 也不会触发事件。我也遇到同样的安全错误。
  • “事件没有触发” 然后根本就没有连接“我也遇到同样的安全错误” 错,解码自己的字节时不存在安全问题。从任何外部服务器通过readBytes 填充这些字节甚至都没有问题。这就是为什么它是一个实际的解决方法。当您使用 getLoader.load(myBytes); 时,load 被告知解码您自己的图像字节,如果您提供一些外部 URL(例如 sendRequest),那么您强制它假设您正在窃取内容,因此它有安全错误找不到外部服务器上存在的权限文件时。
  • Edit 您的问题展示了如何处理 URLStream、字节和解码过程的示例。您的上述两种情况在该系统中都是未知的。 PS:所以如果 URLStream 没有运行(没有检测到进度)那么你以后如何得到安全错误?在您尝试使用 URLLoader 解码(显示)之前,字节大小是否与 swf 文件大小匹配?无论如何,如果您更新,我会查看您的代码...
  • 我已将 swf 嵌入到 html 文件中。网络面板显示来自服务器的连接和响应。我可以看到来自服务器的获取请求和响应。网络响应但由于某些原因闪烁(安全可能)不接受数据(我猜)。//完成事件和进度事件不会触发,但安全事件会触发并给我响应错误 2048.bytesize 总大小和可用大小始终为零。谢谢
  • Flash 发出的实际请求是 server/crossdomain.xml 。但服务器将响应使用信息以及错误消息。我正在那里寻找信息部分。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
相关资源
最近更新 更多