send Content-Type: application / json post with node.js

115

Bagaimana kita bisa membuat permintaan HTTP seperti ini di NodeJS? Contoh atau modul dihargai.

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

Jawaban:

284

Modul permintaan Mikeal dapat melakukan ini dengan mudah:

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
sumber
2
Terima kasih atas jawaban yang membantu ini. Pada akhirnya saya menyadari bahwa opsi tersebut terdokumentasi dengan baik. Tapi tersesat di tengah banyak lainnya ...
yves Baumes
1
Itu tidak berhasil untuk saya sampai saya menambahkan headers: {'content-type' : 'application/json'},opsi.
Guilherme Sampaio
- modul 'request' NodeJs tidak digunakan lagi. - bagaimana kita melakukannya dengan menggunakan modul 'http'? Terima kasih.
Andrei Diaconescu
11

Contoh Sederhana

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
sumber
10

Seperti yang dikatakan dalam dokumentasi resmi :

body - badan entitas untuk permintaan PATCH, POST dan PUT. Harus berupa Buffer, String, atau ReadStream. Jika json benar, maka isi harus merupakan objek yang dapat diserialkan JSON.

Saat mengirim JSON, Anda hanya perlu memasukkannya ke dalam opsi.

var options = {
    uri: 'https://myurl.com',
    method: 'POST',
    json: true,
    body: {'my_date' : 'json'}
}
request(options, myCallback)
JiN
sumber
4
Apakah hanya saya atau dokumentasinya saja yang menyebalkan?
Lucio
4

Untuk beberapa alasan, hanya ini yang berhasil untuk saya hari ini. Semua varian lainnya berakhir dengan kesalahan json buruk dari API.

Selain itu, varian lain untuk membuat permintaan POST yang diperlukan dengan muatan 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
sumber
0

Menggunakan permintaan dengan header dan postingan.

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
sumber
0

Karena requestmodul yang digunakan jawaban lain sudah tidak digunakan lagi, saya sarankan untuk beralih ke 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.dll
sumber