当前位置: 首页 > 知识库问答 >
问题:

访问API与cURL很好,但与Fetch API不一样

江鹏飞
2023-03-14
    null

我不明白为什么这在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);

    });

返回的错误是

如果Shopify不包含Access-Control-Allow-Origin头,为什么Curl的请求可以正常工作?有节点库和Ruby库可以访问Shopify API,所以很难相信它们根本不允许从javascript访问。

所以我想我的问题是我可以做什么来从JavaScript访问这个API?

共有1个答案

壤驷英叡
2023-03-14

如果你得到CORS错误,你就做错了。这意味着您正在向宇宙公开您的API密钥。大线索!

相反,您可能希望调查使用安装在您商店中的应用程序来拨打您的JS电话。您可以为此使用应用程序代理。您安装的任何应用程序都可以访问您获得批准范围的任何APIendpoint。因此,如果你的应用程序被批准请求,询问位置将返回给你。

简单!

 类似资料:
  • 我知道这在SO上已经解决了很多次,但所有的答案大多是“向服务器添加某个标头”。在这种情况下,API(Shopify)工作得非常好,可以通过curl轻松访问。 我在Axios库和Fetch API中都尝试过这一点。 我已经尝试了Fetch选项中的、和的每个值 我已确认我的基本凭证是正确的 我在多个浏览器中尝试过 我已经从localhost和localhost两个方面进行了尝试。com(在my/etc

  • 我遇到了很多文章,很多文章建议使用OAuth over API密钥。据我所知,在OAuth中,我们最终获得了访问令牌,它的有效期为很多天。例如,QuickBooks online OAuth令牌的有效期为6个月。 因此,访问令牌等同于API Key。无论谁得到它,都应该像API密钥一样保护它。OAuth调用应该通过HTTPS进行,类似于基于API Key的调用。 相对于OAuth的另一个优势是授权

  • 我试图让Alpha-beta修剪工作,但与我的Minimax函数相比,它给了我完全错误的动作。这是我的极大极小函数,它现在工作得很好。 这是我的Alphabeta修剪函数 两者都使用相同的评估,不确定这里出了什么问题。谢谢你的帮助。

  • 注册与访问 打开后台-会员-注册与访问 1.注册类型:普通注册/邮箱注册/手机注册 如开启邮箱和手机注册,请在通知系统功能中进行邮箱与短信通知配置,游客在注册时通过验证后方能注册成功 2.后台验证码是否开启:开启后显示 商城验证码是否开启:开启后显示 3.是否允许注册会员:设置为不允许则游客无法注册成为站点会员 4.错误多次后显示:配置该项后,开启验证码后验证码默认不显示,在登录错误次数达到设置值

  • 当通过PHP发出curl请求时,curl得到“无法连接到主机”。当我转储curl信息时,不是请求服务器的ip。 这在我的测试服务器上运行良好,但在生产环境中不起作用。在生产服务器上,这是我得到的响应: 大堆 7. 无法连接到主机数组(23){["url"]=

  • 问题内容: 访问REST API时,这两段代码有何不同? 和 从以下两个方面判断,它们都产生相同的结果 问题答案: 是一个简单的螺丝刀。非常适合简单的GET请求,其中标头,HTTP请求方法,超时,cookiejar,重定向和其他重要内容无关紧要。 带有流上下文或带有setopt的cURL 的Powerdrill带有您可以想到的每一个细节。