为什么我对Printful API的请求被拒绝访问?

时间:2018-05-14 11:56:59

标签: javascript ajax cors

所以,我试图打电话给Printful API。首先,我按照"如何开始"来自documentation page的部分。在"商店"选项我将URL设置为指向我的网站,之后我进入了" API"选项并生成我的API密钥。 我提出请求的方式是基于"授权"部分,也来自文档。据我所知,我唯一需要做的就是发送带有使用base64编码的API密钥的Authorization标头,它应该可以工作。

var API_KEY = '---';
var API_KEY64 = btoa(API_KEY);

$.ajax({
  url: 'https://api.printful.com/products',
  headers: {
    'Authorization': 'Basic ' + API_KEY64
  },
  dataType: 'JSON',
  type: 'GET',

  complete: function (data) {
    if (data.readyState == '4' && data.status == '200') {
      p.innerHTML = 'success';
    }
    else {
      p.innerHTML = 'error';
    }
  }
});

运行此代码时会发生什么? p 元素的内部HTML会出错,我在控制台中收到此错误:

Error

我已经尝试排除标题,看看会发生什么:我得到一个类似的错误,除了没有关于飞行前检查的部分:

Error(No Headers)

如果我将请求直接发送到&{39; https://api.printful.com'(在这里发送请求没有意义;只是为了看看我得到了什么),我得到了什么是:

No endpoint

我还在四天的时间内向Printful的开发支持发送了多封电子邮件,但我还没有听到任何消息。

有关互联网上API的信息非常稀少。我确实发现只有一个人提出有关它的问题。在任何地方都没有教程或代码示例。

我还研究了一些关于跨源资源共享的内容,希望Access-Control-Allow-Origin是我可以在客户端设置的东西(再次,没有意义;只是在黑暗中拍摄。)

提前感谢您提供任何帮助和/或见解。

1 个答案:

答案 0 :(得分:1)

因为Printful尚未将其API服务器配置为允许跨源Ajax请求。

请注意,它们为多种不同的语言提供了多个client libraries,但对于客户端JavaScript则没有。

另请注意,在他们链接到的页面中,他们可以说明您的API密钥:

  

保密API密钥,不要在任何公共网站的客户端代码中公开它。

(请注意,您现在已经在Stackoverflow问题中发布了您的API密钥,它是公开的,将被搜索引擎索引并缓存。您需要让Printful销毁它并立即创建一个新的。)