Я не могу выполнить запрос, который должен установить заголовок с аксиомами

Я пытаюсь получить некоторые данные из внешнего API (из Mashape), для которого требуется определенный заголовок для установки ключа API.

Все в порядке с использованием jQuery:

$.ajax({
    url: 'https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks',
    type: 'GET',
    data: {},
    dataType: 'json',
    success: function(data) { console.dir((data.source)); },
    error: function(err) { alert(err); },
    beforeSend: function(xhr) {
    xhr.setRequestHeader("X-Mashape-Authorization", "MY_API_KEY");
    }
});

Однако, когда я пытаюсь выполнить тот же запрос с помощью axios для реагирующего приложения, у меня возникает ошибка 404:

axios.get({
  url: 'https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks',
  headers: {
      "X-Mashape-Authorization": "MY_API_KEY"
   }
 })

Есть что-то, что мне не хватает? Спасибо.


person Mehdi Brillaud    schedule 30.06.2016    source источник
comment
Привет. Не могли бы вы сказать точный текст ошибки 404? это приходит по запросу GET или OPTIONS? (вы можете проверить это на панели «Сеть» в Chrome devtools)   -  person Alex Alexeev    schedule 30.06.2016


Ответы (3)


Попробуйте также сделать это так, не устанавливая значения по умолчанию:

axios.get('https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks', {
      headers: { "X-Mashape-Key": "MY_API_KEY" }
    })
      .then((resp) => {
        console.dir(resp);

      })
      .catch(err => {
        console.log(err);
      });
  }

Он должен работать.

PS Я также заметил, что вы используете разные ключи заголовка (X-Mashape-Authorization) и ответ (X-Mashape-Key). Может быть, это тоже как-то связано с ошибкой 404?

person Alex Alexeev    schedule 30.06.2016
comment
Наконец-то мне стало проще с конфигурацией, так как все мои вызовы направлены на один и тот же API, но вы ответили на мой первоначальный вопрос, так что у вас есть мой голос :) - person Mehdi Brillaud; 30.06.2016
comment
Да, вы правы, для подобных вызовов лучше установить значения по умолчанию. И спасибо за голосование. Удачи! - person Alex Alexeev; 30.06.2016
comment
это относится и к почтовому методу? я не могу заставить его работать. вместо этого кажется, что заголовки отправляются как свойство полезной нагрузки - person razorxan; 20.03.2017
comment
@razorxan да, это должно сработать. не забудьте изменить его на axios.put :) Проверьте официальную документацию о том, как использовать параметры и изменить конфигурацию github .com/mzabrskie/axios. Если вы можете предоставить подробную информацию о вашем конкретном случае, я могу помочь больше. - person Alex Alexeev; 21.03.2017

Я наконец понял.

Нам нужно установить заголовок ПЕРЕД запросом, используя axios.defaults.headers.common['header_name'] = "API_KEY"; :

axios.defaults.baseURL = 'https://omgvamp-hearthstone-v1.p.mashape.com';
axios.defaults.headers.common['X-Mashape-Key'] = "API_KEY";
axios.get('/cardbacks')
    .then((resp) => {
        console.dir(resp);
    });
person Mehdi Brillaud    schedule 30.06.2016
comment
Рекомендуется сохранить копию предыдущих значений по умолчанию и снова сбросить значения по умолчанию, потому что это повлияет на все последующие запросы. - person technophyle; 10.08.2017

У меня есть лучший способ решить эту проблему.

Вам просто нужно добавить формат параметров из axios, как показано ниже:

axios({
    method: <method>,
    url: <url>,
    data: <params>,
    headers: { common: <headers> },
  })
  .then(response => {
    if (!cb) return { error: 'No callback' };
    return cb(response);
  })
  .catch((err) => cb(err.response));

person acan12    schedule 26.04.2017