[英]Getting 415 error when trying to pass in multiple arguments to a get request in React with axios
[英]Why Error 415 with Axios when CURL works?
如果我做
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 的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'}
}
)
由於您的Content-Type
為application/x-www-form-urlencoded
,因此您無法傳入 javascript object,因此需要對其進行解析。
您可以使用URLSearchParams
中的 URLSearchParams API 或使用qs
package 來執行此操作。 您還需要在有效負載中使用data
鍵而不是params
鍵:
const axios = require('axios')
const qs = require('qs')
async function getToken() {
try {
const response = await axios.post(
'https://example.com/api/jwt/login',
qs.stringify({ username: 'test', password: 'test' }),
{ headers: {'Content-Type': 'application/x-www-form-urlencoded'} }
)
console.log(response);
} catch (error) {
console.error(error);
}
}
getToken()
您可以在 axios github 上找到概述此內容的文檔: https://github.com/axios/axios#using-applicationx-www-form
嘗試使用查詢字符串模塊編碼數據
npm install query-string
接着
const qs = require('query-string');
//...
data: qs.stringify({
username: "test",
password: "test"
}),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.