为啥在连接到 mailchimp API 3.0 时出现 401 错误

Posted

技术标签:

【中文标题】为啥在连接到 mailchimp API 3.0 时出现 401 错误【英文标题】:Why am i getting 401 error while making connection to mailchimp API 3.0为什么在连接到 mailchimp API 3.0 时出现 401 错误 【发布时间】:2019-07-30 20:57:15 【问题描述】:

我正在尝试使用 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”访问 XMLHttpRequest 在“https://us19.api.mailchimp.com/3.0/lists/listid/members”已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头.

点击链接给我

"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"API Key Missing","status":401,"detail":"您的请求不包含 API 密钥。","instance": "c8c5e111-6969-41a1-9e68-f545959ba6c5"

Console.log(request);

【问题讨论】:

【参考方案1】:

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

    尝试使用“get”HTTP 方法进行调用,就像在 mailchimp 的示例代码中一样。 您需要对Authentication 标头的用户名和密码进行base64 编码。 “基本”和实际身份验证令牌之间缺少一个空格。 在设置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);

【讨论】:

嘿安德烈亚斯,我做了更改,但我仍然遇到同样的错误。 嗯,你可以在发送前console.log(request),并将其添加到问题中吗?只需在共享之前将 Authorization 标头值替换为 xxxx(否则您将共享您的 API 密钥)。 我没有获得任何授权标头值,我已附上图片以供参考

以上是关于为啥在连接到 mailchimp API 3.0 时出现 401 错误的主要内容,如果未能解决你的问题,请参考以下文章

Mailchimp API 无效服务器

如何从 MailChimp 3.0 API 获取兴趣组?

是否可以在 mailchimp API 3.0 中按成员获取细分?

Mailchimp 如何在 javascript 中调用 mailchimp 3.0 API

MailChimp API 3.0 无效资源错误

Mailchimp API 3.0 批量订阅 - Mailchimp3 PY