我有下面的axios代码,它可以工作,我得到了预期的响应:
(some字符串因明显原因而更改)
const data = new FormData()
data.append('grant_type', 'password')
data.append('username', 'XXXXX')
data.append('password', 'YYYYY')
const url = 'https://www.example.com/endpoint/'
const config = {
withCredentials: false,
auth: {
username: 'AAAAA',
password: 'BBBBB'
},
headers: {
'Content-Type': 'multipart/form-data'
}
}
const response = await axios.post(url, data, config)
const answer = response.data.answer
console.log('answer', answer)
我想将此请求转换为获取,但收到一条Bad Request
消息。我已尝试:
const authorization = btoa('AAAAA:BBBBB')
console.log(authorization)
const data = new FormData()
data.append('grant_type', 'password')
data.append('username', 'XXXXX')
data.append('password', 'YYYYY')
console.log(data)
const response = await fetch('https://www.example.com/endpoint/', {
method: 'POST',
credentials: 'omit',
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `Basic ${authorization}`
},
body: data
})
console.log(response)
尝试在网络标签中比较两个请求没有多大帮助。它们看起来几乎相同。我在请求中看到的唯一区别是在标头中:
阿西奥斯
"accept": "application/json, text/plain, */*",
"content-type": "multipart/form-data; boundary=----WebKitFormBoundaryxYSW9yII1AMmhcc3",
accept键不仅仅包含*/*
,content-type键包含边界信息。
获取
"accept": "*/*",
"content-type": "multipart/form-data",
我不确定边界信息对内容类型是否重要,也不知道如何确保它被包含在内。我尝试修改代码以使accept键匹配,但这并没有改变行为。
1条答案
按热度按时间noj0wjuj1#
通过一些额外的研究,我了解到当使用fetch来发布multipart/form-data时,不应该定义
content-type
,这样系统就可以构造它并添加所需的边界信息,此外,credentials
设置也不是必需的。获取请求应如下所示:
通过更改代码,我得到了预期的响应。
有关此行为的文档,请参阅Tellfetch()的答案,以完全不发送Content-Type标头