# Cuerpos de solicitud codificados como URL

Por defecto, axios serializa objetos JavaScript a JSON. Para enviar data en un formato distinto a application/x-www-form-urlencoded, puedes usar una de las siguientes opciones.

En un navegador, puedes usar el API URLSearchParams (opens new window) de la siguiente manera:

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Nota que URLSearchParams no es soportado por todos los navegadores (ver caniuse.com (opens new window)), pero hay un polyfill (opens new window) disponible (asegurate de usar polyfill en el ambiente global).

Alternativamente, puedes codificar data usando la librería qs (opens new window):

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

O de otra manera (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);

# Node.js

# Query string

En node.js, puedes usar el modulo querystring (opens new window) de la siguiente manera:

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

O 'URLSearchParams' (opens new window) del 'modulo url' (opens new window) de esta manera:

const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());

También puedes usar la librería qs (opens new window).

# NOTA

La librería qs es preferida si necesitas un stringify de objetos anidados, ya que el método querystring tiene problemas conocidos con ese caso de uso (https://github.com/nodejs/node-v0.x-archive/issues/1665).

# Form data

En node.js, puedes usar la librería form-data (opens new window) de la siguiente manera:

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() })

Alternativamente, usa un interceptor:

axios.interceptors.request.use(config => {
  if (config.data instanceof FormData) {
    Object.assign(config.headers, config.data.getHeaders());
  }
  return config;
});
Last Updated: 2/24/2023, 9:22:20 AM