[英]Sent Post Request with Body Form Data with fetch()
我正在尝试针对 API 发布,当我使用 Postman 并将我的所有数据附加为“表单数据”时,它确实有效。
当我用这样的 js fetch 方法尝试它时
const data = {
'client_id': 'lorem ipsum',
'client_secret': 'lorem ipsum',
'scope': 'lorem ipsum',
'grant_type': 'lorem ipsum'
};
fetch(apiUrl, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
})
或者像这样:
const data = new FormData();
data.append('client_id', 'lorem ipsum');
data.append('client_secret', 'lorem ipsum');
data.append('scope', 'lorem ipsum');
data.append('grant_type', 'lorem ipsum');
fetch(apiUrl, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: data
})
我收到了一个 invalid_request 错误,所以很明显 API 期望数据有所不同,有人可以帮助我解决如何在 fetch 方法中将数据作为 formData 传输,例如 Postman 吗?
上述错误通常是由于fetch方法提供的内容与服务器 API 预期的内容类型不匹配造成的。
在上面的代码中,fetch 方法正在发送类型为 'aplpication/json' 的内容。
如果服务器针对此格式抛出错误,则可以得出结论,服务器可能需要不同格式的内容。
支持的有效内容类型格式是:
因此,可以通过将fetch调用中的 'content-type' 标头从'application/json'更改为这些其他支持的类型之一来解决该问题。
工作 fetch 调用的示例:
const data = new FormData();
data.append('client_id', 'lorem ipsum');
data.append('client_secret', 'lorem ipsum');
data.append('scope', 'lorem ipsum');
data.append('grant_type', 'lorem ipsum');
fetch(apiUrl, {
method: "POST",
headers: {
// "Content-Type": "application/json" --> option 1 (not working)
// "Content-Type": "application/x-www-form-urlencoded" --> option 2
// "Content-Type": "multipart/form-data" --> option 3
// "Content-Type": "text/plain" --> option 4
},
body: data
})
// Option 5: Try fetch without any header
fetch(apiUrl, {
method: "POST",
body: data
})
更多信息:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
您需要添加内容类型
'Content-Type': 'application/x-www-form-urlencoded'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.