Как преобразовать cURL в запрос Axios

#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 и т.д.