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/"}'
Radoslav
fuente

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.
  }
});
Josh Smith
fuente
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);  
}); 
Poonam Gupta
fuente
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)
JiN
fuente
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/"})
});

Paul T. Rawkeen
fuente
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));
 })
Cristian Cardoso
fuente
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()
ehrencrona
fuente