如何解决获取标头请求Javascript:cURL工作正常,禁止提取
我想在React App中GET请求此链接https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8的标题。进行简单请求时
request('https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8',function (error,response,body) {
console.error('error:',error);
console.log('body:',body);
});
我明白了
Access to fetch at 'https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8' from
origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-
Control-Allow-Origin' header is present on the requested resource. If an
opaque response serves your needs,set the request's mode to 'no-cors' to
fetch the resource with CORS disabled.
使用cors-wherewhere代理时
request('https://cors-anywhere.herokuapp.com/https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8',body);
});
我明白了
request.js:150 GET https://cors-anywhere.herokuapp.com/https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8 403 (Forbidden)
但是当我只是卷曲时,我会得到正确的响应
curl -s -o /dev/null -D - https://soundcloud.app.goo.gl/u6XXuqp3Q7Q7WXgH8
有人可以向我解释这种行为,也许告诉我如何克服这种情况?
谢谢!
解决方法
当您尝试直接从浏览器调用API且该API不允许任何其他网站获取数据时,通常会出现CORS错误。
到目前为止,我可以想到2种解决此问题的方法-
- 您要么从后端代码中调用该API,要么从后端收集从网站接收的数据,然后在客户端传输数据。基本上,您将包装原始API。
- 您可以使用NGINX之类的Web服务器,并在域上配置指向外部API的特定路径以及项目的其他路径。这将有助于使外部API和您的React代码都使用相同的域名。
主要目的是让外部API可以在您的域中与React代码一起工作。
,在浏览器上下文JS中,例如在对API的调用中,CORS适用。而是使用CURL请求,实际上是在运行服务器端上下文,因此,CORS不适用。这就是为什么您可以从服务器上下文或node.js上下文中而不是从浏览器中的同一fetch调用中访问instagrams非官方api的原因。可能的解决方案:
-
服务器设置的
- Allow-Content-Orgin标头必须包含网页托管所在的域。
- 将Eletron或NodeWebkit.js用于运行带有浏览器(铬)的客户端的可视化应用程序以启动您的应用程序(浏览器和服务器上下文混合使用,不适用于CORS)
- 运行一个node.js应用程序(没有浏览器,没有服务器上下文),然后从终端运行您的应用程序。 (CORS不适用)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。