javascript - 为什么 CURL 工作时 Axios 出现错误 415?
问题描述
如果我做
curl -s -d "username=test&password=test" -X POST https://example.com/api/jwt/login
然后我得到了预期的令牌。如果我做
const axios = require('axios')
async function getToken() {
try {
const response = await axios.post('https://example.com/api/jwt/login', {
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
params: {
username: "test",
password: "test"
}
})
console.log(response);
} catch (error) {
console.error(error);
}
}
getToken()
然后我得到
Error 415 Unsupported Media Type
HTTP ERROR 415
Problem accessing /api/jwt/login. Reason:
Unsupported Media Type
问题
谁能弄清楚为什么它适用于curl
而不适用于axios
?我究竟做错了什么?
更新
以下给出了相同的错误
const qs = require('query-string');
async function getToken() {
try {
const response = await axios.post('https://example.com/api/jwt/login', {
method: 'post',
params: qs.stringify({
username: "test",
password: "test"
})
})
console.log(response);
} catch (error) {
console.error(error);
}
}
解决方案
的论据axios.post
是url[, data[, config]]
。请参阅文档。您的示例将以下内容传递给data
参数,该参数将是请求正文:
{
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
params: {
username: "test",
password: "test"
}
}
服务器无法解析或解析不正确,因此返回415 Unsupported Media Type
。
您需要做的是分离出您的请求正文和配置。您的请求正文也需要进行编码。
axios.post(
'https://example.com/api/jwt/login',
qs.stringify(({
username: "test",
password: "test"
}),
{
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}
)
推荐阅读
- reactjs - 如何检查数组是否具有相同的对象 React Native
- c - sprintf_s 和访问冲突
- java - 片段中的回收站视图。Activity 关闭后不更新
- ruby-on-rails - Rails 嵌套表单复选框字段未保存到我的数据库模型
- chart.js - chart.js 如何绘制箭头而不是条
- django - 如何使用 rest_framework_json_api 在 Django 中创建我自己的端点?
- node.js - 是否有任何替代此错误的方法 - 声明类型既不是“void”也不是“any”的函数必须返回一个值?
- javascript - 获取 HTML 元素的 name 属性并将其发送到服务器
- .net-core - .net core 2.2 多承载令牌认证方案
- power-automate - 无论分叉路径如何,如何运行一项操作