这令人难以置信! Flash程序员熟悉这个例子:
var req:URLRequest = new URLRequest("http://yoursite.com/yourservice.ext");
req.method = URLRequestMethod.POST;
req.data = new URLVariables("name=John+Doe");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("yourusername:yourpassword");
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
req.requestHeaders.push(credsHeader);
var loader:URLLoader = new URLLoader();
loader.load(req);
好的......太棒了...真的很有效。如您所见,我手动添加标头授权进行基本HTTP身份验证。但是......如果我将请求metod从POST更改为GET,则不会生成标头。
有没有人知道解决方案? 1000x thx!
答案 0 :(得分:4)
我很惊讶您甚至能够使用POST
请求来使用它。 2007年12月,Flash Player已更新为明确禁止Authorization header
。我想他们可能已经重新允许了它。但我会对此感到惊讶。 编辑:根据@ derFunk的评论,事实证明事实上该标题随后被重新允许,但在将其发送到其他域时,必须在crossdomain.xml
中明确允许。
除了Authorization
标头的特定问题之外,我非常确定Flash Player只会发送带有POST
请求的自定义请求标头。对不起,我没有这方面的链接,但在我的公司,我们广泛使用Flash Player来处理Restful Web服务,我们必须实施各种解决方法以使工作正常。
总的来说,Flash Player对HTTP有糟糕支持。实际上,我们的变通方法是通过发送请求标头X-Crippled-Client: true
来激活的,该标头告诉我们的服务解释请求,并以错误的方式发送响应。这是一个真正的痛苦。
抱歉,我不能帮助更多...祝你好运!
答案 1 :(得分:3)
@Flax:是的,我对HTTP标头的Flash安全性表示赞同。但还有一种方法可以做到这一点,但这需要一些工作。尝试使用Socket而不是URLLoader,因为Socket没有这种限制。因此,对于HTTP请求,打开一个到服务器端口80的套接字(http://yoursite.com/)。一旦连接到服务器,发送所有http请求标头。然后在SocketDataEvent上,解析数据并读取(或丢弃)响应头,然后继续处理数据。
答案 2 :(得分:2)
所以这是超级老了,但是当我在寻找一种方法将Parse.com与Flash Player一起使用时,它就出现了。
我很困惑,这实际上有效,但要让Flash在GET命令中发送标头,只需将其设置为POST,但运行覆盖。
req.requestHeaders.push(new URLRequestHeader("X-HTTP-Method-Override", URLRequestMethod.GET));
我试着认为这很疯狂,无法工作,但确实如此!
答案 3 :(得分:0)
您也可以通过GET方法发送标头,除非您在独立的Flash Player调试器上测试它(不要在简单测试中) v.11.4.402.265 。如果您在浏览器中打开本地swf,它也可以正常工作。