axios 为带有表单数据的发布请求返回 404
Posted
技术标签:
【中文标题】axios 为带有表单数据的发布请求返回 404【英文标题】:axios returns 404 for a post request with form data 【发布时间】:2021-08-02 18:16:18 【问题描述】:我正在尝试从 Azure AD 获取图形令牌,其中包含通过 Axios 的表单数据的发布请求。响应会引发错误Request failed with status code 404。下面是代码,
const axios = require('axios')
const FormData = require('form-data')
const bodyFormData = new FormData()
bodyFormData.append('client_id', <client id>)
bodyFormData.append('client_secret', <secret>)
bodyFormData.append('scope', <scope>)
bodyFormData.append('requested_token_use', <token use>)
bodyFormData.append('assertion', <token>)
axios
.post('https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token', bodyFormData,
headers: bodyFormData.getHeaders(),
)
.then((response) =>
console.log('AXIOS RESPONSE ', response)
)
.catch((err) =>
console.log('AXIOS ERROR ', err)
)
post 请求在邮递员中工作正常。如果 bodyFormData 从 Axios 请求中删除,Axios 中的响应也符合预期。当 bodyFormData 添加到请求中时,我遇到了错误。
AXIOS ERROR 错误:请求失败,状态码为 404
【问题讨论】:
检查bodyFormData.getHeaders()
。
【参考方案1】:
不要使用form-data
,而是使用querystring
const axios = require('axios')
const querystring = require('querystring');
const data = querystring.stringify(
client_id: '<client id>',
client_secret: '<secret>',
scope: '<scope>',
requested_token_use: '<token use>',
assertion: '<token>'
);
axios.post('https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token', data)
.then((response) =>
console.log('AXIOS RESPONSE ', response)
)
.catch((err) =>
console.log('AXIOS ERROR ', err)
);
【讨论】:
为我工作!谢谢一百万 为什么要修复它(因为它对我们有用)?!【参考方案2】:尝试删除标题部分,它应该可以工作。
没有任何理由必须从 FormData 对象中获取标头,因为它是一个 API,并且会使用其他形式的身份验证,并且可能会弄乱调用。
这不是可能被某些安全措施阻止的数据抓取调用。
【讨论】:
请补充一些细节。导致问题的原因和解决方案背后的逻辑是什么 我删除了标题。不过,我遇到了错误。另外,我在我的节点包中添加了 cors。但仍然面临 404。 CORS 应该不是问题,因为您正在调用外部 api。以上是关于axios 为带有表单数据的发布请求返回 404的主要内容,如果未能解决你的问题,请参考以下文章
spring 控制器返回 404 并带有 post 和 file 以生成响应实体