使用JavaScript获取任意URL

时间:2013-08-04 19:03:42

标签: javascript jquery cors

我希望能够使用JavaScript从各种网站访问/robots.txt。这是一个侧面项目,测试网站的可用性,而不是所有这些都在我的控制之下。我试过这个:

    $.get(robotsUrl, function() {
            console.log('success!');
    }, "text")
        .fail(function() {
            console.log('failed :(');
        });

但是,

失败了
XMLHttpRequest cannot load https://my.test.url/robots.txt. Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin

MDN's page on Same-Origin-Policy表示可以使用某些元素嵌入内容,例如<script><iframe> <embed>。我可以从任意网站加载/robots.txt吗?有没有其他方法可以在其他域上访问此文件?

4 个答案:

答案 0 :(得分:3)

您可以使用其中任何一个加载它,您将无法将数据提供给JavaScript。这是同源政策的重点。

如果您想从任意站点获取任意数据,则需要在服务器端执行此操作。

答案 1 :(得分:1)

要绕过相同的原始策略,您需要控制主机站点并设置allow-origin(此处不是选项),或者通过JavaScript以外的方法加载它(JSONP执行;它是作为标准脚本加载。)

这意味着您可以在iframe中显示robots.txt,例如,只需设置其src属性。

如果你想操纵JavaScript中的内容,那将无法工作(即使你在iframe中加载内容,你仍然不允许与它进行交互)。您的最终选择是设置代理。在您的服务器上有一个脚本,在调用时将加载相关文件并重定向内容。这并不难,但意味着您的服务器将拥有更高的流量(并且您需要将其锁定以便不会被恶意使用)。

答案 2 :(得分:1)

iframes不会让你偷看内容。你可以向你的用户展示它,但我猜你想用代码分析它。


您可以在服务器上执行此操作。即使你只有一个/cors/robots/domain.tld处理程序(还有其他文件你需要访问)。如果你的情况可行,这可能是最好的方式。


AnyOrigin,是一项免费服务,允许您进行跨源请求。

$.getJSON('http://anyorigin.com/get?url=google.com/robots.txt&callback=?', function(data){
    console.log(data.contents); // contents of Robots.txt
});

答案 3 :(得分:0)

非常确定Chrome可以通过在禁用同源策略的情况下运行浏览器来实现这一点:Disable same origin policy in Chrome

最好在浏览器的上下文之外做这样的事情,但是在命令行上可能使用像CURL这样的东西?