2009-10-27 75 views
5

这是***令人难以置信!闪存程序员熟悉这个例子:基本认证与闪存

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认证。但是...如果我更改从POST到GET的请求metod,则不会生成标头。

有没有人知道解决方案? 1000x thx!

+0

我发现这个:http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionscript-3/ – xpepermint 2009-10-27 14:45:41

回答

4

我很惊讶,你甚至已经能够得到它的一个POST请求工作。在2007年12月,Flash Player被更新为明确禁止Authorization header。我想他们有可能重新允许它。但我会为此感到惊讶。 编辑:按@ derFunk的评论,事实证明,事实上,头球攻门被随后重新允许的,但它发送到不同的域时,它必须在crossdomain.xml被明确允许的。

除了具有Authorization标题的特定问题之外,我非常确定Flash Player只会发送带有POST请求的自定义请求标头。对不起,我没有链接,但在我的公司,我们广泛使用Flash Player来处理Restful Web服务,并且我们必须实施各种解决方法才能使事情顺利进行。

底线,Flash播放器已为HTTP可怕支持。实际上,我们通过发送请求标头X-Crippled-Client: true来激活我们的一套解决方法,该请求标头告诉我们的服务解释请求,并以错误的方式发送响应。这是一个真正的痛苦。

对不起,我不能提供更多的帮助...祝你好运!

+1

关于Authorization Header的更多细节可以在这里找到:http://helpx.adobe.com/flash-player/kb/authorization-header-request-flash-player.html:“从Adobe Flash Player 9.0.115.0开始,授权标头被添加到黑名单的HTTP标头,并且仅在此版本中被Flash Player阻止。对于晚于9.0.115的Flash Player版本。0,授权标头未被阻止,但是目标域需要一个crossdomain.xml文件来指定允许授权标头,如果它不同于承载SWF文件的域。“ – derFunk 2013-03-05 12:19:22

+0

@derFunk伟大的信息,谢谢! – 2013-03-06 15:24:38

3

@Flax:是的,我完全同意与HTTP头闪光灯的安全性。但还有一种方法可以做到这一点,但这需要一些工作。尝试使用Socket而不是URLLoader,因为Socket没有这些限制。因此,对于HTTP请求,打开一个套接字到服务器的端口80(http://yoursite.com/)。只要它连接到服务器,发送所有的http请求标题。然后在SocketDataEvent上解析数据并读取(或丢弃)响应头,然后继续处理数据。

+0

是的。 ..我做了这个......但现在我有跨域安全问题:)。套接字将为非HTTP服务器,如聊天服务器,你可以通过crossdomain手动满足闪存做伎俩(例如:http://coderslike.us/ 2009/01/23/flash-socket-code-and-crossdomain-policy-serving /)。 – xpepermint 2009-11-10 08:53:14

+1

这里你可以使用Security.loadPolicyFile(“http://www.yoursite.com/crossdomain.xml”);在连接之前在插座上。 – bhups 2009-11-10 09:10:12

0

您也可以通过GET方法发送标题,除非您在独立的Flash Player调试器上进行测试(不要简单测试)v.11.4.402.265。如果你在浏览器中打开本地swf,它也可以正常工作。

2

因此,这是超旧的,但它来到了,而我正在寻找一种方式来使用Parse.com与Flash Player。

我很困惑,这实际上有效,但为了让Flash在GET命令中发送头文件,只需将其设置为POST,但运行覆盖。

req.requestHeaders.push(new URLRequestHeader("X-HTTP-Method-Override", URLRequestMethod.GET)); 

我试过它认为这是疯了,不可能工作,但它确实!