enviar Content-Type: application / json post con node.js


115

¿Cómo podemos hacer una solicitud HTTP como esta en NodeJS? Ejemplo o módulo apreciado.

curl https://www.googleapis.com/urlshortener/v1/url \
  -H 'Content-Type: application/json' \
  -d '{"longUrl": "http://www.google.com/"}'

Respuestas:


284

El módulo de solicitud de Mikeal puede hacer esto fácilmente:

var request = require('request');

var options = {
  uri: 'https://www.googleapis.com/urlshortener/v1/url',
  method: 'POST',
  json: {
    "longUrl": "http://www.google.com/"
  }
};

request(options, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body.id) // Print the shortened url.
  }
});

2
Gracias por esta útil respuesta. Al final, me doy cuenta de que la opción está bien documentada. Pero perdido en medio de muchos otros ...
yves Baumes

1
No funcionó para mí hasta que agregué la headers: {'content-type' : 'application/json'},opción.
Guilherme Sampaio

- El módulo de 'solicitud' de NodeJs está en desuso. - ¿Cómo haríamos esto usando el módulo 'http'? Gracias.
Andrei Diaconescu

11

Ejemplo simple

var request = require('request');

//Custom Header pass
var headersOpt = {  
    "content-type": "application/json",
};
request(
        {
        method:'post',
        url:'https://www.googleapis.com/urlshortener/v1/url', 
        form: {name:'hello',age:25}, 
        headers: headersOpt,
        json: true,
    }, function (error, response, body) {  
        //Print the Response
        console.log(body);  
}); 

10

Como dice la documentación oficial :

body - cuerpo de entidad para solicitudes PATCH, POST y PUT. Debe ser un búfer, cadena o ReadStream. Si json es verdadero, el cuerpo debe ser un objeto serializable JSON.

Al enviar JSON solo tienes que ponerlo en el cuerpo de la opción.

var options = {
    uri: 'https://myurl.com',
    method: 'POST',
    json: true,
    body: {'my_date' : 'json'}
}
request(options, myCallback)

4
¿Soy solo yo o su documentación apesta?
Lucio

4

Por alguna razón, solo esto funcionó para mí hoy. Todas las demás variantes terminaron en un error json incorrecto de API.

Además, otra variante más para crear la solicitud POST requerida con la carga útil JSON.

request.post({
    uri: 'https://www.googleapis.com/urlshortener/v1/url',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({"longUrl": "http://www.google.com/"})
});


0

Uso de solicitud con encabezados y publicación.

var options = {
            headers: {
                  'Authorization': 'AccessKey ' + token,
                  'Content-Type' : 'application/json'
            },
            uri: 'https://myurl.com/param' + value',
            method: 'POST',
            json: {'key':'value'}
 };
      
 request(options, function (err, httpResponse, body) {
    if (err){
         console.log("Hubo un error", JSON.stringify(err));
    }
    //res.status(200).send("Correcto" + JSON.stringify(body));
 })

0

Dado que el requestmódulo que usan otras respuestas ha quedado obsoleto, puedo sugerir cambiar a node-fetch:

const fetch = require("node-fetch")

const url = "https://www.googleapis.com/urlshortener/v1/url"
const payload = { longUrl: "http://www.google.com/" }

const res = await fetch(url, {
  method: "post",
  body: JSON.stringify(payload),
  headers: { "Content-Type": "application/json" },
})

const { id } = await res.json()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.