AS3使用Loader加载受htaccess保护的文件

时间:2011-07-05 20:56:55

标签: flash actionscript-3

我正在尝试将托管在网站上的外部SWF加载到本地SWF文件中。外部SWF使用htaccess在受密码保护的目录中。

以下是我目前正在尝试使用的代码:

var loaderUrlRequest:URLRequest = new URLRequest("http://www.my-website.com/externalFlashFile.swf");
loaderUrlRequest.requestHeaders.push(new URLRequestHeader("Authorization", "Basic " + $Base64.encode("username:password")));
loaderUrlRequest.method = URLRequestMethod.POST;
loaderUrlRequest.data = true;
var loader:Loader = new Loader();
addChildAt(loader, 0);
loader.load(loaderUrlRequest);

文件URL,用户名,密码和base64编码都经过检查并且正确无误。

但是,我收到以下错误:

Error opening URL 'http://www.my-website.com/externalFlashFile.swf'
Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.

任何想法我可能做错了,或者从纯粹的角度来看是否有更好的方法来解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:5)

White whale, holy grail

  

在Adobe®AIR®中,应用程序安全沙箱中的内容(例如随AIR应用程序一起安装的内容)可以使用任何请求标头,而不会出现错误。 ,对于在不同安全沙箱中的Adobe AIR中运行的内容,或对于在Flash®Player中运行的内容 ,使用以下请求标头会导致运行时错误

     

Accept-Charset,Accept-Encoding,Accept-Ranges,Age,Allow,Allowed,授权,Charge-To,Connect,Connection,Content-Length,Content-Location,Content-Range, Cookie,日期,删除,ETag,期望,获取,头,主机,If-Modified-since,Keep-Alive,Last-Modified,Location,Max-Forwards,Options,Origin,Post,Proxy-Authenticate,Proxy-Authorization,代理连接,公共,放置,范围,引用,请求范围,重试后,服务器,TE,跟踪,预告片,转移编码,升级,URI,用户代理,变化,通过,警告,WWW-身份验证,的x闪光版本。

     

URLRequestDefaults.setLoginCredentialsForHost :设置所选主机的默认用户和密码凭据。 ... 在应用安全沙箱中运行的只有Adobe®AIR®内容可以使用URLRequestDefaults类。

所以,你只有一个选择:从需要授权的域名的网页加载你的swf。在加载swf之前,您将通过http授权步骤,浏览器将保留其余部分。

实际上,当您尝试访问http授权后面的内容时,服务器会发出一个代码= 401的http响应(除非您事先发送授权标头)。 Flash Player无法对此做任何事情,只有AIR运行时能够以任何方式发送授权标头。

答案 1 :(得分:0)

您需要在ActionScript应用程序中进行身份验证,这可以通过在URLRequestDefaults类上使用一些静态变量和方法来实现。

您需要做的就是在使用URLLoader进行调用之前添加以下两行代码

URLRequestDefaults.setLoginCredentialsForHost(hostname, user, password);
URLRequestDefaults.authenticate = true;

您也可以删除requestHeaders(除非它们有其他用途)。