我正在尝试使用actionscript抓取一个网页,但不断收到此错误(例如尝试抓取github.com):
[SWF] /get-webpage.swf-解压缩后的2,708字节 错误:请求者从http://github.com请求资源 http://localhost:4567/get-webpage.swf 由于缺乏策略文件权限而被拒绝。
*安全沙箱违规* 与http://github.com的连接已停止 - http://localhost:4567/get-webpage.swf
不允许
有什么方法可以在Actionscript中完成这项工作吗? crossdomain.xml
文件如何发挥作用?根据我的理解,一个网站将crossdomain.xml
放在他们的根目录上,指定一个swf可以访问他们的东西。那是对的吗?我需要做什么才能完成上述工作?我正在使用的代码基本上是这样的:
var request:URLRequest = new URLRequest("http://github.com")
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, complete);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, error);
loader.load(request);
function complete(event:Event):void {
trace(event.target.data);
}
function error(event:SecurityErrorEvent):void {
trace(event.text);
}
在HTML文件中使用:
var flashvars = {};
var params = {allowscriptaccess: "always"};
var attributes = {id: "my_flash", name: "my_flash"};
swfobject.embedSWF("/get-webpage.swf", "flash_content", "50%", "50%", "10.0.0", "playerProductInstall.swf", flashvars, params, attributes, swfHasLoadedSir);
是否可以解决该安全错误?
答案 0 :(得分:7)
简短的回答,没有。
MEDIUM ANSWER,NO。 我看到github在这里有一个跨域xml策略。 https://github.com/crossdomain.xml
这是Flash尝试从其他域中提取内容时自动加载的文件。
这个xml文件说,只允许github上的flash吸收数据。所以github明确表示他们不希望你使用flash来加载任何内容。
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="github.com" />
<allow-access-from domain="gist.github.com" />
<site-control permitted-cross-domain-policies="master-only"/>
</cross-domain-policy>
我认为这种闪存行为的原因是人们+公司会相信闪存。我认为这种机制可以防止大规模的DOS攻击(想想一个加载在新闻网站上的Flash Banner,比如github,它可能会造成巨大的负担)。
您可以通过电子邮件发送github并将您的域名添加到他们在crossdomain文件中的列表中,但这可能需要一段时间和很多政治。
长期回答,是的。 您可以使用PHP或其他方式创建一个HTTP代理来引入网页。 PHP或代码必须在加载SWF文件的同一域上运行。例如youdomain.com/folder/proxy.php。你必须基本上要求这个代理在PHP中获取一个网页并将结果返回到flash。整个过程有点痛苦,特别是如果您正在使用必须发送参数或HTTP标头的Web服务。您可以在线安装开源PHP代理文件。
祝你好运!回到Megan Fox看变形金刚2。哦是的。