Javascript 当CURL工作时,为什么Axios出现错误415?
如果我这样做 然后我得到了预期的令牌。如果我这样做Javascript 当CURL工作时,为什么Axios出现错误415?,javascript,node.js,curl,ecmascript-6,axios,Javascript,Node.js,Curl,Ecmascript 6,Axios,如果我这样做 然后我得到了预期的令牌。如果我这样做 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://examp
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()
问题:
有人能理解为什么它与curl
一起工作而不与axios一起工作吗?我做错了什么
更新
下面给出了相同的错误
Error 415 Unsupported Media Type
HTTP ERROR 415
Problem accessing /api/jwt/login. Reason:
Unsupported Media Type
尝试使用querystring模块来编辑数据
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);
}
}
然后
npm install query-string
尝试使用querystring模块编辑数据
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);
}
}
然后
npm install query-string
axios.post的参数是url[,data[,config]]
。看见您的示例将以下内容传递给data
参数,该参数将作为请求主体:
const qs = require('query-string');
//...
data: qs.stringify({
username: "test",
password: "test"
}),
服务器无法对此进行分析或分析不正确,因此返回415不支持的媒体类型
您需要做的是分离出请求主体和配置。您的请求主体也需要被删除
axios.post
的参数是url[,data[,config]]
。看见您的示例将以下内容传递给data
参数,该参数将作为请求主体:
const qs = require('query-string');
//...
data: qs.stringify({
username: "test",
password: "test"
}),
服务器无法对此进行分析或分析不正确,因此返回415不支持的媒体类型
您需要做的是分离出请求主体和配置。您的请求主体也需要被删除
由于您将内容类型
设置为应用程序/x-www-form-urlencoded
,因此无法传入javascript对象,因此需要对其进行解析
您可以使用JavaScript中的URLSearchParams
API,或者使用qs
包来实现这一点。您还需要使用有效负载中的数据
键,而不是参数
键:
const axios=require('axios'))
常量qs=require('qs')
异步函数getToken(){
试一试{
const response=等待axios.post(
'https://example.com/api/jwt/login',
stringify({username:'test',password:'test'}),
{标题:{'Content-Type':'application/x-www-form-urlencoded'}
)
控制台日志(响应);
}捕获(错误){
控制台错误(error);
}
}
getToken()
您可以在axios github上找到概述这一点的文档:由于您的内容类型为application/x-www-form-urlencoded
,因此无法传入javascript对象,需要对其进行解析
您可以使用JavaScript中的URLSearchParams
API,或者使用qs
包来实现这一点。您还需要使用有效负载中的数据
键,而不是参数
键:
const axios=require('axios'))
常量qs=require('qs')
异步函数getToken(){
试一试{
const response=等待axios.post(
'https://example.com/api/jwt/login',
stringify({username:'test',password:'test'}),
{标题:{'Content-Type':'application/x-www-form-urlencoded'}
)
控制台日志(响应);
}捕获(错误){
控制台错误(error);
}
}
getToken()
您可以在axios github上找到概述这一点的文档:对不起,输入错误。。。请尝试data:qs…
而不是param:qs…
找到此帖子:抱歉,输入错误。。。请尝试data:qs…
而不是param:qs…
找到此帖子:Wing的答案有效,而他没有数据。我想这是唯一的区别?Wing的答案是有效的,因为他没有数据。我想这是唯一的区别吧?