使用JavaScript获取任意URL

使用JavaScript获取任意URL,javascript,jquery,cors,Javascript,Jquery,Cors,我希望能够使用JavaScript从各种网站访问/robots.txt。这是一个测试站点可用性的辅助项目,并非所有站点都在我的控制之下。我试过这个: $.get(robotsUrl, function() { console.log('success!'); }, "text") .fail(function() { console.log('failed :('); }); 但是,这在以下情况下失

我希望能够使用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

表示可以使用某些元素嵌入内容,例如
。我可以从任意站点加载带有以下内容的
/robots.txt
?是否有其他方法可以在其他域上访问此文件?

您可以使用其中任何一个域加载此文件,但您将无法将数据提供给JavaScript。这正是同一原产地政策的要点


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

您可以使用其中任何一个站点加载数据,但您无法将数据提供给JavaScript。这正是同一原产地政策的要点


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

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


在浏览器环境之外执行类似操作可能更可取,但是,在命令行上,可能使用类似于CURL的操作?

可以肯定的是,通过在禁用同源策略的情况下运行浏览器,Chrome可以做到这一点:


在浏览器上下文之外执行类似操作可能更可取,但是,在命令行上,可能使用类似CURL?

的方法来绕过同一源策略,您需要控制主机站点并设置允许源(此处不是选项),或者通过JavaScript以外的方法加载它(JSONP就是这样做的;它作为标准脚本加载)

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


如果您想在JavaScript中操作内容,这将不起作用(即使在iframe中加载内容后,仍然不允许您与它交互)。最后一个选项是设置代理。在服务器上安装一个脚本,当调用该脚本时,该脚本将加载相关文件并重定向内容。这并不难做到,但意味着您的服务器将具有更高的流量(您需要将其锁定,以防恶意使用).

要绕过同一源策略,您需要控制主机站点并设置允许源(此处不是选项),或者通过JavaScript以外的方法加载它(JSONP是这样做的;它作为标准脚本加载)

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


如果您想在JavaScript中操作内容,这将不起作用(即使在iframe中加载内容后,仍然不允许您与它交互)。最后一个选项是设置代理。在服务器上安装一个脚本,当调用该脚本时,该脚本将加载相关文件并重定向内容。这并不难做到,但意味着您的服务器将具有更高的流量(您需要将其锁定,以防恶意使用).

iframes不允许您查看内容。您可以将其显示给用户,但我猜您希望使用代码对其进行分析


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


,是一项免费服务,允许您提出跨来源请求

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

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


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


,是一项免费服务,允许您提出跨来源请求

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

@Sushanth--JSONP是不可能的,因为它是robots.txt。CORS是不可能的,因为它是针对任意站点的。我很好奇你这个项目的具体目标是什么。你只是在收集数据吗?还是试图通过互联网向用户提供实时信息?我想建立一个站点,检测用户的互联网连接是否正确正在筛选连接。我有一个可能被阻止的域列表。因此服务器端抓取不是一个选项。@Sushanth--JSONP是不可能的,因为它是robots.txt。CORS是不可能的,因为它是针对任意站点的。我很好奇你在这个项目中的具体目标是什么。你只是收集数据吗?还是trying是否要通过internet向用户提供实时信息?我想建立一个网站,检测用户的internet连接是否被过滤。我有一个可能被阻止的域列表。因此服务器端抓取不是一个选项。是否可以检测URL是否加载?理想情况下,我希望查看内容,但如果没有t、 知道我是否有HTTP 200就足够了。不。状态代码也受同源策略的保护。(否则,哦,看,200,不是403,我的访问者登录到了我不控制的其他网站)。这是一个可以关闭的浏览器安全功能(至少在Chrome中)。谢谢,很高兴知道。听起来我唯一的选择是在
标记中使用
/favicon.ico
。假设站点有一个favicon,并且它位于该URI。是否可以检测URL是否加载?理想情况下,我希望看到内容,但如果没有,则知道我是否有HTTP 200就足够了。不。状态代码也受同源策略的保护。(否则,哦,看,200,不是403,我的访问者登录到了我不控制的其他网站)。这是浏览器安全