我试图抓取一个带有actionscript的网页,但不断收到此错误(例如试图抓住github.com):
[SWF] /get-webpage.swf - 解压缩后2,708字节错误:请求者从 http:// localhost:4567/get-webpage.swf请求资源http://github.com 由于缺乏策略而被拒绝文件权限.
*安全沙箱违规* 与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);
有可能绕过那个安全错误吗?
简短的答案,没有.
MEDIUM ANSWER,NO.我看到github在这里有一个跨域xml策略. https://github.com/crossdomain.xml
这是Flash尝试从其他域中提取内容时自动加载的文件.
这个xml文件说,只允许github上的flash吸收数据.所以github明确表示他们不希望你使用flash来加载他们的任何内容.
我认为这种闪存行为的原因是人们+公司会相信闪存.我认为这种机制可以防止大规模的DOS攻击(想想一个加载在新闻网站上的Flash Banner,比如github,它可能会造成巨大的负担).
您可以通过电子邮件发送github并将您的域名添加到他们在crossdomain文件中的列表中,但这可能需要一些时间和许多政治.
长期回答,是的.您可以使用PHP或其他方式创建一个HTTP代理来引入网页.PHP或代码必须在加载SWF文件的同一域上运行.例如youdomain.com/folder/proxy.php.你必须基本上要求这个代理在PHP中获取一个网页并将结果返回到flash.整个过程有点痛苦,特别是如果您正在使用必须发送参数或HTTP标头的Web服务.您可以在线安装开源PHP代理文件.
祝好运!回到Megan Fox看变形金刚2.哦耶.