【发布时间】:2020-11-12 23:04:19
【问题描述】:
我正在尝试使用 fetch(). 向 URL 发送 POST 请求
我故意设置了 Authorization 标头,但是当我在 Firefox 开发工具中检查响应时,它输出以下错误 "Missing request header 'Authorization' for method parameter of String"。
var target_url = "https://api.sonos.com/login/v3/oauth/access";
var encoded_msg = btoa(client_id + ':' + secret); // base64-encodes client_id and secret using semicolon as delimiter
var params = `grant_type=authorization_code` + `&code=${authCode}` + `&redirect_uri=${redirect_uri}`;
var myHeaders = new Headers({
'Authorization': `Basic ${encoded_msg}`,
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Content-Length': params.length,
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
});
fetch(target_url, {
method: 'POST',
mode: 'no-cors',
credentials: 'include',
redirect: 'follow',
headers: myHeaders,
body: params
})
.then(response => {
console.log("Status: " + response.status);
console.log("StatusText: " + response.statusText);
console.log("Type: " + response.type);
console.log("URL: " + response.url);
});
什么会删除 Authorization-Header,为什么以及如何防止它?
编辑:
为了澄清,我正在使用 Firebase Cloud Functions 托管我的网页,我从该网页将请求发送到 Sonos Authorization API。
使用 Postman,请求通过,我得到了正确的响应。
【问题讨论】:
-
嗨,我知道你很新,但我一直站在你的立场上。这个问题的表述很好,但你迷路了,不知道去哪里找。为了回答您的问题...我不知道您的设置,所以我无法判断。但是我可以告诉你的是使用邮递员进行调试(postman.com),我要做的是从邮递员发送请求以查看错误是在服务器中还是在您的客户端中,如果您使用邮递员发送请求带有授权标头,然后是服务器问题,请联系服务器人员
-
您需要添加 Bearer 而不是 Basic。这是 Basic 故意的吗?
-
然后我会尝试查看请求,调试它。尝试使用 console.log(this),在发送之前查看您发送的所有参数
-
承载或基本取决于服务器配置,我目前正在处理基本并且它有效
-
我以前在这里遇到过这样的问题,最后写了this article about no-cors你可能会觉得有帮助!
标签: javascript http sonos