gpt4 book ai didi

javascript - 使用 fetch() 发送带有正文表单数据的 Post 请求

转载 作者:行者123 更新时间:2023-12-02 21:22:11 24 4
gpt4 key购买 nike

我正在尝试针对 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 期望数据有所不同,任何人都可以帮助我了解如何将数据作为 formData 传输例如,在 Postman 的 fetch 方法中是这样吗?

最佳答案

上述错误通常是由于 fetch 方法提供的内容与服务器期望的内容类型不匹配而导致的API。

在上面的代码中,fetch方法发送类型为“application/json”的内容。

如果服务器针对此格式抛出错误,则可以得出结论,服务器可能需要不同格式的内容。

支持的有效内容类型格式是:

  • application/json (在当前场景中不起作用)
  • application/x-www-form-urlencoded
  • 多部分/表单数据
  • 文本/纯文本

因此,可以通过将 fetch 调用中的“content-type” header 从 'application/json' 更改为其他受支持的类型之一来解决该问题.

工作获取调用的示例:

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

关于javascript - 使用 fetch() 发送带有正文表单数据的 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60817781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com