2009-10-27 80 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)); 

我試過它認爲這是瘋了,不可能工作,但它確實!