连接到mailchimp API 3.0时为什么会出现401错误

时间:2019-03-08 19:27:46

标签: javascript mailchimp-api-v3.0

我正在尝试使用http请求与黑猩猩API 3.0建立连接。但是该请求被CORS阻止,并且我从黑猩猩收到401错误,即我没有传递API密钥。但是我正在传递密钥。任何人都可以解释如何解决此问题。

我也不能为此项目使用任何插件或库。它必须是Vanilla JavaScript。

谢谢

get : function(url,callback) {
    var data = JSON.stringify({
    "email_address": "test2@test.ca",
    "status": "subscribed"
    });


    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
           var response = JSON.parse(request.response);
            callback(response);
        }
    }; 

    request.open('get',url,true);

    request.setRequestHeader('Authorization', 'Basic ' + btoa('anystring' + ':' + myapikey));
    request.setRequestHeader('content-type', 'application/json');
    request.setRequestHeader('Access-Control-Allow-Origin', '*');

    request.send(data);
}

作为参考,这是来自mailchimp的示例代码。

curl --request GET \
--url 'https://<dc>.api.mailchimp.com/3.0/' \
--user 'anystring:<your_apikey>'

错误: 从源'null'对'https://us19.api.mailchimp.com/3.0/lists/listid/members'处XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:邮件头上没有'Access-Control-Allow-Origin'标头请求的资源。

然后单击链接会给我

{“类型”:“ http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/”,“标题”:“缺少API密钥”,“状态”:401,“详细信息”:“您的请求不包含API密钥。”,“实例“:” c8c5e111-6969-41a1-9e68-f545959ba6c5“}

Console.log(request);

1 个答案:

答案 0 :(得分:0)

我在这里看到可能导致问题的四件事:

  1. 尝试使用“ get” HTTP方法进行呼叫,就像mailchimp中的示例代码一样。
  2. 您需要对Authentication标头中的用户名和密码进行base64编码。
  3. “基本”和实际身份验证令牌之间缺少空格。
  4. 设置Access-Control-Allow-Origin标头时,您没有正确使用setRequestHeader方法。该值应该是其自己的参数。

尝试一下:

    request.open('get',url,true);

    request.setRequestHeader('Authorization', 'Basic ' + btoa('anystring' + ':' + myapikey));
    request.setRequestHeader('content-type', 'application/json');
    request.setRequestHeader('Access-Control-Allow-Origin', '*');

    request.send(data);