Como definir cabeçalho e opções em axios?

159

Eu uso o Axios para executar uma postagem HTTP como esta:

import axios from 'axios'
params = {'HTTP_CONTENT_LANGUAGE': self.language}
headers = {'header1': value}
axios.post(url, params, headers)

Isso está correto? Ou devo fazer:

axios.post(url, params: params, headers: headers)
user2950593
fonte
3
Gostaria de saber por que você aceitou uma resposta errada!
Sirwan Afifi 19/07/19
@SirwanAfifi Não há resposta aceita para esta pergunta
Tessaracter 4/04
2
@Tessaracter Em 13 de maio de 2019, houve uma resposta aceita com uma pontuação de -78. Foi resolvido desde então.
jkmartindale
@jkmartindale Interessante
Tessaracter

Respostas:

263

Existem várias maneiras de fazer isso:

  • Para uma única solicitação:

    let config = {
      headers: {
        header1: value,
      }
    }
    
    let data = {
      'HTTP_CONTENT_LANGUAGE': self.language
    }
    
    axios.post(URL, data, config).then(...)
  • Para definir a configuração global padrão:

    axios.defaults.headers.post['header1'] = 'value' // for POST requests
    axios.defaults.headers.common['header1'] = 'value' // for all requests
  • Para definir como padrão na instância axios:

    let instance = axios.create({
      headers: {
        post: {        // can be common or any other method
          header1: 'value1'
        }
      }
    })
    
    //- or after instance has been created
    instance.defaults.headers.post['header1'] = 'value'
    
    //- or before a request is made
    // using Interceptors
    instance.interceptors.request.use(config => {
      config.headers.post['header1'] = 'value';
      return config;
    });
riyaz-ali
fonte
1
posso pedir para você dar uma olhada em uma axiospergunta relacionada aqui: stackoverflow.com/questions/59470085/… ?
Istiaque Ahmed 24/12/19
141

Você pode enviar uma solicitação de obtenção com cabeçalhos (para autenticação com jwt, por exemplo):

axios.get('https://example.com/getSomething', {
 headers: {
   Authorization: 'Bearer ' + token //the token is a variable which holds the token
 }
})

Além disso, você pode enviar uma solicitação de postagem.

axios.post('https://example.com/postSomething', {
 email: varEmail, //varEmail is a variable which holds the email
 password: varPassword
},
{
  headers: {
    Authorization: 'Bearer ' + varToken
  }
})

Minha maneira de fazer isso é definir uma solicitação como esta:

 axios({
  method: 'post', //you can set what request you want to be
  url: 'https://example.com/request',
  data: {id: varID},
  headers: {
    Authorization: 'Bearer ' + varToken
  }
})
roli roli
fonte
1
A segunda solicitação de postagem não fornece cabeçalhos específicos. Você pode editá-la para obter um exemplo completo?
listrado
usando datain interceptors.request => ele substituirá sua parte do corpo atual da chamada específica que estamos usando. Portanto, não é usado nesse caso.
Anupam Maurya
Você precisa seguir este padrão de 'Autorização:' Portador '+ token' ou pode fazer algo como o Auth: token, por exemplo? Eu não estou usando auth0 api, mas fazendo o meu próprio no nó, desculpe se pergunta estúpida nova para jwt e coisas de segurança em geral
Wiliam Cardoso
24

Você pode passar um objeto de configuração para axios como:

axios({
  method: 'post',
  url: '....',
  params: {'HTTP_CONTENT_LANGUAGE': self.language},
  headers: {'header1': value}
})
sjc42002
fonte
16

Este é um exemplo simples de uma configuração com cabeçalhos e responseType:

var config = {
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  responseType: 'blob'
};

axios.post('http://YOUR_URL', this.data, config)
  .then((response) => {
  console.log(response.data);
});

O tipo de conteúdo pode ser 'application / x-www-form-urlencoded' ou 'application / json' e também pode funcionar 'application / json; charset = utf-8'

responseType pode ser 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

Neste exemplo, this.data são os dados que você deseja enviar. Pode ser um valor ou uma matriz. (Se você deseja enviar um objeto, provavelmente precisará serializá-lo)

gtamborero
fonte
Você pode explicar a diferença entre definir os cabeçalhos com o nosso sem a palavra-chave config?
bubble-cord
1
O uso de uma variável de configuração gera um código mais agradável e mais legível; nada mais @ bubble-cord
gtamborero 27/01
14

Aqui está o caminho certo: -

axios.post('url', {"body":data}, {
    headers: {
    'Content-Type': 'application/json'
    }
  }
)

Prateek Arora
fonte
10

Você pode inicializar um cabeçalho padrão axios.defaults.headers

 axios.defaults.headers = {
        'Content-Type': 'application/json',
        Authorization: 'myspecialpassword'
    }

   axios.post('https://myapi.com', { data: "hello world" })
        .then(response => {
            console.log('Response', response.data)
        })
        .catch(e => {
            console.log('Error: ', e.response.data)
        })
Morris S
fonte
9

se você deseja fazer uma solicitação de obtenção com parâmetros e cabeçalhos.

var params = {
  paramName1: paramValue1,
  paramName2: paramValue2
}

var headers = {
  headerName1: headerValue1,
  headerName2: headerValue2
}

 Axios.get(url, {params, headers} ).then(res =>{
  console.log(res.data.representation);
});

Rishith Poloju
fonte
2

tente este código

no exemplo, código use axios get rest API.

em montado

  mounted(){
    var config = {
    headers: { 
      'x-rapidapi-host': 'covid-19-coronavirus-statistics.p.rapidapi.com',
      'x-rapidapi-key': '5156f83861mshd5c5731412d4c5fp18132ejsn8ae65e661a54' 
      }
   };
   axios.get('https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats? 
    country=Thailand',  config)
    .then((response) => {
    console.log(response.data);
  });
}

A esperança é ajuda.

superup
fonte
2

Eu enfrentei esse problema na solicitação de postagem . Eu mudei assim no cabeçalho axios. Funciona bem.

axios.post('http://localhost/M-Experience/resources/GETrends.php',
      {
        firstName: this.name
      },
      {
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
      });
Najathi
fonte
1

axios.post('url', {"body":data}, {
    headers: {
    'Content-Type': 'application/json'
    }
  }
)

Sethy Proem
fonte