Javascript 为什么我的XMLHttpRequest得到robots.txt响应
我正在写一个个人Chrome扩展(注意:这些可以进行跨源请求。请参阅) 我试图使用XMLHttpRequest访问某个网站,然后使用javascript从中提取数据。我的问题是这个网站经常把它的“机器人”页面返回给我,而不是HTML。当然,当我在浏览器中访问此网站时,它工作正常。此外,如果我使用浏览器访问网站,然后发出XHR请求,它也可以正常工作 我想问题可能是我的请求头不正确。然后我修改了我的请求头,使它们与我的浏览器头完全相同(使用chrome.webRequest)。不幸的是,这也不起作用。我注意到的一点是,我的浏览器在其请求头中有一些cookie,我不知道如何复制这些cookie(见下文) 因此,我的问题是:如何解决或调试此问题?有没有办法找出网站为什么要向我提供“机器人”页面?如果我查看它的robots.txt文件,我没有违反任何明显的规则。我对javascript和web编程相当陌生,如果这是一个基本问题,那么很抱歉Javascript 为什么我的XMLHttpRequest得到robots.txt响应,javascript,html,google-chrome,google-chrome-extension,xmlhttprequest,Javascript,Html,Google Chrome,Google Chrome Extension,Xmlhttprequest,我正在写一个个人Chrome扩展(注意:这些可以进行跨源请求。请参阅) 我试图使用XMLHttpRequest访问某个网站,然后使用javascript从中提取数据。我的问题是这个网站经常把它的“机器人”页面返回给我,而不是HTML。当然,当我在浏览器中访问此网站时,它工作正常。此外,如果我使用浏览器访问网站,然后发出XHR请求,它也可以正常工作 我想问题可能是我的请求头不正确。然后我修改了我的请求头,使它们与我的浏览器头完全相同(使用chrome.webRequest)。不幸的是,这也不起作用
以下是我的浏览器请求标题的示例: 获取/XXX/XXX HTTP/1.1 主持人:www.example.com 连接:保持活力 升级不安全的请求:1 用户代理:Mozilla/5.0(Macintosh;英特尔Mac OS X 10_13_6) AppleWebKit/537.36(KHTML,比如Gecko)Chrome/71.0.3578.98 Safari/537.36 接受: text/html,application/xhtml+xml,application/xml;q=0.9,图像/webp,图像/apng,/;q=0.8 推荐人: 接受编码:gzip,deflate,br 接受语言:en-US,en;q=0.9 Cookie:D_IID=XXX-XXX-XXX-XXX-XXX;D_UID=XXX-XXX-XXX-XXX-XXX; D_ZID=XXX-XXX-XXX-XXX-XXX;D_ZUID=XXX-XXX-XXX-XXX-XXX; D_HID=XXX-XXX-XXX-XXX-XXX;D_SID=XXX/XXX/XXX
更新 我还包括在Chrome中定义的“常规”标题: 请求URL: 请求方法:获取 状态代码:200 OK 远程地址:XXX 推荐人策略:降级时无推荐人 和我的回复标题: 缓存控制:私有、无缓存、无存储,必须重新验证 连接:保持活力 内容编码:gzip 内容类型:text/html 日期:2019年2月6日星期三XXX GMT 边缘控制:无存储,绕过缓存 过期时间:1970年1月1日星期四00:00:01 GMT 服务器:XXX 代理控件:无存储,绕过缓存 传输编码:分块 改变:接受编码 X-DB:0 X-DW:0 X-DZ:XXX
更新2 在查看了响应HTML之后,我不确定它是什么。我原本以为这是某种机器人的反应,因为上面写着META NAME=“ROBOTS”,但现在我不太确定了。下面是HTML的一般结构
//一些JAVASCRIPT
当我看一下你的用户代理时,你正在使用Mac、Apple之类的东西
一些背景信息,Chrome使用Safari的渲染引擎,因为苹果不允许其他引擎,苹果的政策。事实上,Chrome只是一个GUI屏蔽,看起来像Chrome,但骨架仍然是Safari。这就是为什么当Safari引擎出现问题时,您无法解决问题的原因。当核心出现问题时,安装另一个浏览器没有帮助。你的问题就是其中之一,悲伤但真实。让我解释一下
过去在网站中嵌入(object/iframe)的(Luondo)webshop也存在类似问题,还启用了跨策略等功能,但在苹果设备上不起作用(仅!)。只有苹果用户在下订单之前需要先访问网店的域名(就像你描述的,cookie问题)。这是一种愚蠢的安全相关策略,仅在使用Safari(或其所需的嵌入式引擎)时存在
我所做的(不过我想对你的情况没有帮助)是在检测到苹果设备时在页面上添加一条消息。该消息包含指向将在另一个选项卡页中打开的webshop域的链接。在此之后,苹果用户可以下订单。另见荷兰语信息(翻译如下):
苹果用户,请注意: Safari有一个安全问题,首先您必须访问我们的webshop提供商一次才能下订单 单击以下链接打开我们的网店提供商的网站,然后您可以将其关闭:[link]在苹果设备上激活订购设施[/link] 对给您带来的不便表示歉意
不是最好的翻译,但是,我想你明白了。这是(从现在起,2019年)两年前的事了,问题仍然存在,就像你告诉我们的那样 ------------- 解决方案: 有没有一个解决方案,可能不适合苹果用户(因为苹果需要解决这个问题),但是,你有没有在安装了Chrome的Linux/Windows机器上尝试过?我打赌它会工作,除非有一些安全限制服务器站点避免ajax调用,但是,我认为没有问题 另一种方法: 1。我不知道你的技能,但是你可以考虑设置代理服务器,以避免这些问题,嵌入(或更好地包括)网站的内容到您的输出(Cookie包括在内)。一个警告tho,这可能是非法的,因为你合并了另一个网站的内容成为你自己的东西 2。询问站点所有者,他们为其服务提供API
关于ajax方法的个人想法: 如果你想“合并”html或提取其他网站的内容(如你所说)(通过使用javascript),而不是你自己的,我怀疑你试图做的是合法的。我想这也是原因