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

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

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