Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的XMLHttpRequest得到robots.txt响应_Javascript_Html_Google Chrome_Google Chrome Extension_Xmlhttprequest - Fatal编程技术网

Javascript 为什么我的XMLHttpRequest得到robots.txt响应

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)。不幸的是,这也不起作用

我正在写一个个人Chrome扩展(注意:这些可以进行跨源请求。请参阅)

我试图使用XMLHttpRequest访问某个网站,然后使用javascript从中提取数据。我的问题是这个网站经常把它的“机器人”页面返回给我,而不是HTML。当然,当我在浏览器中访问此网站时,它工作正常。此外,如果我使用浏览器访问网站,然后发出XHR请求,它也可以正常工作

我想问题可能是我的请求头不正确。然后我修改了我的请求头,使它们与我的浏览器头完全相同(使用chrome.webRequest)。不幸的是,这也不起作用。我注意到的一点是,我的浏览器在其请求头中有一些cookie,我不知道如何复制这些cookie(见下文)

因此,我的问题是:如何解决或调试此问题?有没有办法找出网站为什么要向我提供“机器人”页面?如果我查看它的robots.txt文件,我没有违反任何明显的规则。我对javascript和web编程相当陌生,如果这是一个基本问题,那么很抱歉


以下是我的浏览器请求标题的示例:

获取/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),而不是你自己的,我怀疑你试图做的是合法的。我想这也是原因