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


115

Come possiamo fare una richiesta HTTP come questa in NodeJS? Esempio o modulo apprezzato.

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

Risposte:


284

Il modulo di richiesta di Mikeal può farlo facilmente:

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
Grazie per questa utile risposta. Alla fine mi rendo conto che l'opzione è ben documentata. Ma perso in mezzo a tanti altri ...
yves Baumes

1
Non ha funzionato per me fino a quando non ho aggiunto l' headers: {'content-type' : 'application/json'},opzione.
Guilherme Sampaio

- il modulo 'richiesta' di NodeJs è deprecato. - come lo faremmo utilizzando il modulo "http"? Grazie.
Andrei Diaconescu

11

Semplice esempio

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

Come dice la documentazione ufficiale :

body - corpo dell'entità per le richieste PATCH, POST e PUT. Deve essere un buffer, una stringa o un ReadStream. Se json è true, il corpo deve essere un oggetto serializzabile in JSON.

Quando invii JSON devi solo inserirlo nel corpo dell'opzione.

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

4
Sono solo io o la sua documentazione fa schifo?
Lucio

4

Per qualche motivo solo questo ha funzionato per me oggi. Tutte le altre varianti sono finite con un errore json errato dall'API.

Inoltre, ancora un'altra variante per la creazione di richieste POST richieste con payload 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

Utilizzo della richiesta con intestazioni e post.

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

Poiché il requestmodulo utilizzato dalle altre risposte è stato deprecato, posso suggerire di passare 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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.