envoyer Content-Type: application / json post avec node.js


115

Comment pouvons-nous faire une requête HTTP comme celle-ci dans NodeJS? Exemple ou module apprécié.

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

Réponses:


284

Le module de requête de Mikeal peut le faire facilement:

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
Merci pour cette réponse utile. En fin de compte, je réalise que l'option est bien documentée. Mais perdu au milieu de plein d'autres ...
Yves Baumes

1
Cela n'a pas fonctionné pour moi jusqu'à ce que j'aie ajouté l' headers: {'content-type' : 'application/json'},option.
Guilherme Sampaio

- le module 'request' de NodeJs est obsolète. - comment ferions-nous cela en utilisant le module «http»? Je vous remercie.
Andrei Diaconescu le

11

Exemple 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

Comme le dit la documentation officielle :

body - corps d'entité pour les requêtes PATCH, POST et PUT. Doit être un tampon, une chaîne ou un ReadStream. Si json est vrai, le corps doit être un objet sérialisable JSON.

Lors de l'envoi de JSON, il vous suffit de le mettre dans le corps de l'option.

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

4
Est-ce juste moi ou sa documentation est nulle?
Lucio

4

Pour une raison quelconque, cela a fonctionné pour moi aujourd'hui. Toutes les autres variantes se sont soldées par une mauvaise erreur json de l'API.

En outre, encore une autre variante pour créer une requête POST requise avec une charge utile 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

Utilisation de la demande avec des en-têtes et des messages.

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

Étant donné que le requestmodule utilisé par d'autres réponses est obsolète, puis-je suggérer de passer à 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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.