#node.js #curl #axios
#node.js #curl #axios
Вопрос:
Я пытаюсь преобразовать запрос cURL из здесь в Axios.
curl -d "grant_type=client_credentials
amp;client_id={YOUR APPLICATION'S CLIENT_ID}
amp;client_secret={YOUR APPLICATION'S CLIENT_SECRET}"
https://oauth.nzpost.co.nz/as/token.oauth2
Это работает нормально (когда я ввожу свои учетные данные).
Я попробовал следующий код:
import axios from "axios";
async function testApi() {
try {
const b = await axios.post("https://oauth.nzpost.co.nz/as/token.oauth2", {
client_id: "xxxxxxxxxxxxxxxxxxxxxxxxx",
client_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
grant_type: "client_credentials"
});
} catch (error) {
console.log(error);
}
}
testApi();
Это завершается неудачей с Error 400. grant_type is required
. Я попытался поместить его в качестве параметра, заключив в data: json
блок. Я не могу в этом разобраться.
Комментарии:
1. Глупо, но попробуйте поставить
grant_type
, в качестве первого ключа?2. @naga-elixir-jar — нет, извините. Не работает
Ответ №1:
Я исправил это, мне нужно было поместить значения в параметры
import axios from "axios";
async function testApi() {
try {
const b = await axios.post("https://oauth.nzpost.co.nz/as/token.oauth2",
params: {
client_id: "xxxxxxxxxxxxxxxxxxxxxxxxx",
client_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
grant_type: "client_credentials"
});
} catch (error) {
console.log(error);
}
}
testApi();
Комментарии:
1. Вы должны добавить null между ними. асинхронная функция testApi() { try { const b = ожидает axios.post(» oauth.nzpost.co.nz/as/token . oauth2 «, null, { параметры: { client_id: «xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx», client_secret: «xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx», grant_type: «client_credentials» }}); } перехват (ошибка) { console.log(ошибка); } }
Ответ №2:
curl -d
это более короткий способ сказать curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d
. Это запрос POST, даже если -X POST
он не указан!
Поэтому убедитесь, что вы настроили свой запрос Axios как POST-запрос, а также убедитесь, что ваши данные закодированы по URL с Content-Type
заголовком, установленным на application/x-www-form-urlencoded
. Например…
const response = await axios({
url: 'example.com',
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
// For Basic Authorization (curl -u), set via auth:
auth: {
username: 'myClientId',
password: 'myClientSecret'
},
// This will urlencode the data correctly:
data: new URLSearchParams({
grant_type: 'client_credentials'
})
};
Комментарии:
1. Кодирование с
new URLSearchParams
было тем, что мне было нужно. Спасибо.2.Для Axios уже установлено
Content-Type
значениеapplication/x-www-form-urlencoded
, так что этаheaders:
часть не нужна.
Ответ №3:
Вставьте свою команду
curl -d "grant_type=client_credentialsamp;client_id=aaaaaaaaamp;client_secret=bbbbbbb" https://oauth.nzpost.co.nz/as/token.oauth2
в https://curlconverter.com/node-axios / и это преобразует его в
const axios = require('axios');
const response = await axios.post(
'https://oauth.nzpost.co.nz/as/token.oauth2',
new URLSearchParams({
'grant_type': 'client_credentials',
'client_id': 'aaaaaaaa',
'client_secret': 'bbbbbbb'
})
);
или многие другие библиотеки, такие fetch()
как запросы Python и т.д.