【发布时间】:2013-04-03 23:41:53
【问题描述】:
当发出导致重定向的 HTTP 请求(例如使用 URLLoader)时,是否可以访问重定向链中的任何 URL?
例如,假设发生以下情况:
- 我们向 example.com/a.gif 提出请求
- example.com 重定向到 example2.com/b.gif
- example2.com 重定向到 example3.com/c.gif
我已经盯着 URLLoader 及其各种事件的文档看了一段时间,但似乎也没有办法:
- 指示 URLLoader 不遵循重定向
- 在初始请求后访问任何涉及的 URL
有谁知道是否有办法做到这一点?我不喜欢使用 URLLoader,所以如果有另一个类支持此功能,我会很好地使用它。
谁能指出我正确的方向?提前致谢!
编辑 - 我应该澄清一下:我知道如何使用 DOM 调试器检测 AS3 之外的重定向。我对访问 AS3 中的重定向链特别感兴趣。看起来可以通过HttpStatusEvent 使用AIR 播放器,但是使用Flash Player 时相关属性不可用。
Edit 2 - 我也尝试过使用 HTTP 客户端库(具体来说,是 as3httpclientlib)。除了它从端口 843 加载跨域策略而不是通过向 /crossdomain.xml 发出 HTTP 请求这一事实之外,这有效。我正在使用的上下文需要后者,因此除非有办法强制 Socket 从 HTTP 而不是端口 843 加载跨域策略,否则使用带有 Socket 底层的东西是行不通的。
【问题讨论】:
-
这些是服务器端重定向还是客户端重定向?如果他们是服务器端;它们对 Flex 应用程序不是透明的吗?
-
它们是服务器端重定向(这就是我说“example.com”重定向到 example2.com 的原因)。自动遵循重定向。我正在尝试找到一种方法来拦截重定向,或者至少要知道它们正在发生。
-
使用AS3HTTPClient library 可能会更成功。该库使用 Flash Socket 发出 HTTP 请求……因此,您应该能够获得 HTTP 响应及其包含的结果代码。我假设 AS3HTTPClient 遵循重定向,但是您可能必须修改源以使其调度事件以通知您它正在遵循重定向。
-
感谢您的回复。我也试过这个,它能够做我想做的事。然而,它不会完全这样做,因为它使用 Socket 来完成它的所有网络工作,它从远程主机的端口 843 而不是 /crossdomain.xml 加载跨域策略。我没有提到这是一个要求,但它是。你知道是否有办法强制它通过 HTTP 加载跨域策略?
标签: actionscript-3 flash apache-flex