我正在尝试使用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“}
答案 0 :(得分:0)
我在这里看到可能导致问题的四件事:
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);