Accessing API works fine with cURL but not with Fetch API(使用curl可以很好地访问API,但使用Fetch API则不行)
问题描述
我知道这个问题已经解决了很多次了,但是所有的答案大多都是"向服务器添加特定的头"。在这种情况下,API(Shopify)工作得非常好,并且可以通过cURL轻松访问。
我已经使用Axios库和Fetch API尝试过这一点。
- 我尝试了FETCH选项中
referrer
、mode
和referrerPolicy
的每个值。 - 我已确认我的BasicAuth凭据是正确的。
- 我在多个浏览器中尝试过。
- 我已经在localhost、localhost.com(在我的/etc/hosts中设置值)和具有真实域名的服务器上都尝试过。
我不明白为什么这在curl中可以很好地工作,而在fetch()中就不行。
以下是我的代码的简化版本:
const apiKey = 'mykey';
const apiPassword = 'mypass';
const apibase = 'https://my-shop-domain.myshopify.com/admin/';
const endpoint = 'locations.json';
var headers = new Headers({
"Authorization": "Basic " + btoa( apiKey + ':' + apiPassword ),
});
fetch( apibase + endpoint {
method: 'GET',
headers: headers,
mode: 'no-cors',
// cache: "no-store",
// referrer: "client",
// referrerPolicy: "origin",
// credentials: 'include'
}).then( resp => resp.json().then( resp => {
console.log( resp );
})).catch( err => {
console.error(err);
});
,返回的错误为
CORS策略已阻止对从源‘https://localhost:8080’在‘https://my-shop-domain.myshopify.com/admin/locations.json’处获取的访问:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在‘Access-Control-Allow-Origin’标头。如果不透明的响应满足您的需要,请将请求的模式设置为""no-CORS""以在禁用CORS的情况下获取资源。
如果Shopify不包含Access-Control-Allow-Origin头,为什么请求可以使用cURL正常工作?有节点库和Ruby库可以访问Shopify API,所以很难相信它们根本不允许从javascript访问。
所以我想我的问题是如何使用javascript访问此API?
推荐答案
如果您收到CORS错误,则您的操作是错误的。这意味着您正在向世界公开您的API密钥。大线索!
相反,您可能希望调查一下使用商店中安装的App进行JS调用。为此,您可以使用App Proxy。您安装的任何应用程序都可以访问您获得批准作用域的任何API端点。因此,如果你的应用程序被批准询问位置,询问位置将会返回给你。
简单!
这篇关于使用curl可以很好地访问API,但使用Fetch API则不行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用curl可以很好地访问API,但使用Fetch API则不行


- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Fetch API 如何获取响应体? 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01