有没有办法抓取一个带有Actionscript的网页???我得到一个SecurityError

时间:2010-07-11 07:27:35

标签: flex flash security crossdomain.xml

我正在尝试使用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);

是否可以解决该安全错误?

1 个答案:

答案 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。哦是的。