ส่ง Content-Type: application / json post พร้อม node.js


115

เราจะขอ HTTP แบบนี้ใน NodeJS ได้อย่างไร? ตัวอย่างหรือโมดูลที่ชื่นชม

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

คำตอบ:


284

โมดูลคำขอของ Mikealสามารถทำได้อย่างง่ายดาย:

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
ขอบคุณสำหรับคำตอบที่เป็นประโยชน์นี้ ในที่สุดฉันก็รู้ว่าตัวเลือกนี้ได้รับการบันทึกไว้อย่างดี แต่แพ้กลางคนอื่น ๆ อีกมากมาย ...
yves Baumes

1
มันไม่ได้ผลสำหรับฉันจนกว่าฉันจะเพิ่มheaders: {'content-type' : 'application/json'},ตัวเลือก
Guilherme Sampaio

- โมดูล 'คำขอ' ของ NodeJs เลิกใช้งานแล้ว - เราจะทำอย่างไรโดยใช้โมดูล 'http' ขอบคุณ.
Andrei Diaconescu

11

ตัวอย่างง่ายๆ

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

ตามเอกสารอย่างเป็นทางการกล่าวว่า:

body - ตัวเอนทิตีสำหรับคำขอ PATCH, POST และ PUT ต้องเป็น Buffer, String หรือ ReadStream ถ้า json เป็นจริง body ต้องเป็นอ็อบเจกต์ที่สามารถต่ออนุกรมได้ JSON

เมื่อส่ง JSON คุณต้องใส่ไว้ในเนื้อหาของตัวเลือก

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

4
มันเป็นแค่ฉันหรือเอกสารมันห่วย?
Lucio

4

ด้วยเหตุผลบางอย่างสิ่งนี้ใช้ได้กับฉันในวันนี้ ตัวแปรอื่น ๆ ทั้งหมดลงเอยด้วยข้อผิดพลาดjson ที่ไม่ดีจาก API

นอกจากนี้ยังมีอีกตัวแปรหนึ่งสำหรับการสร้างคำขอ POST ที่จำเป็นด้วยเพย์โหลด 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

ใช้คำขอกับส่วนหัวและโพสต์

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

เนื่องจากrequestโมดูลที่คำตอบอื่นใช้ถูกเลิกใช้แล้วฉันขอแนะนำให้เปลี่ยนไปใช้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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.