# URL-Encoder le contenu d’une requête
Par défaut, Axios serialise les objets JavaScript en JSON
. Pour plutôt envoyer les données au format application/x-www-form-urlencoded
, vous pouvez utiliser l’une des options suivantes.
# Dans le navigateur
Dans le navigateur, vous pouvez utiliser l’API URLSearchParams
(opens new window) comme ceci :
const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);
Note :
URLSearchParams
n’est pas supporté par tous les navigateurs (voir caniuse.com (opens new window)), mais un polyfill (opens new window) est disponible (prenez soin de polyfiller l’environnement global).
Autrement, vous pouvez encoder les données avec la librairie qs
(opens new window) :
const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
Ou sinon (ES6),
import qs from 'qs';
const data = { 'bar': 123 };
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: qs.stringify(data),
url,
};
axios(options);
# Avec node.js
# querystring
Avec node.js, vous pouvez utiliser le module querystring
(opens new window) comme ceci :
const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
ou bien le constructeur URLSearchParams
(opens new window) du module url
(opens new window) comme ceci :
const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());
Vous pouvez également utiliser la librairie qs
(opens new window).
Note : la librairie
qs
est préférable si vous devez stringifier des objets imbriqués, car la méthodequerystring
est connue pour causer des problèmes dans ce cas-là (opens new window).
# form-data
Avec node.js, vous pouvez utiliser la librairie form-data
(opens new window) comme ceci :
const FormData = require('form-data');
const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
axios.post('https://example.com', form, { headers: form.getHeaders() })
Autrement, vous pouvez utiliser un intercepteur :
axios.interceptors.request.use(config => {
if (config.data instanceof FormData) {
Object.assign(config.headers, config.data.getHeaders());
}
return config;
});