如何在node.js中創建HTTP POST請求?


Answers

如果使用request庫,這會變得更容易。

var request = require('request');

request.post(
    'http://www.yoursite.com/formpage',
    { json: { key: 'value' } },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    }
);

除了提供一個很好的語法,它使json請求變得容易,處理oauth簽名(對於twitter等),可以執行多部分錶單(例如用於上傳文件)和流式處理。

要安裝請求,請使用命令npm install request

Question

如何使用node.js中的數據創建出站HTTP POST請求?




對於那些在晚些時候來到這裡的人。 現在有許多不同的庫可以用最少的代碼來完成這一點。 除非你絕對需要控制低級別的HTTP,否則我更喜歡HTTP請求的優雅輕量級庫。

一個這樣的圖書館是Unirest

要安裝它,請使用npm
$ npm install unirest

到了Hello, World! 大家都習慣的例子。

var unirest = require('unirest');

unirest.post('http://example.com/helloworld')
.header('Accept', 'application/json')
.send({ "Hello": "World!" })
.end(function (response) {
  console.log(response.body);
});


額外:
很多人也建議使用request https://www.npmjs.com/package/request

值得注意的是, Unirest在幕後使用了request庫。

Unirest提供了直接訪問請求對象的方法。

例:

var Request = unirest.get('http://mockbin.com/request');



在創建一個低級別的工具來處理帖子並獲得我的項目請求之後,我掙扎了很多,然後決定在這裡發布我的努力。 在接受的答案的線上,這是一個用於發送JSON數據的http和https POST請求的片段。

const http = require("http")
const https = require("https")

// Request handler function
let postJSON = (options, postData, callback) => {

    // Serializing JSON
    post_data = JSON.stringify(postData)

    let port = options.port == 443 ? https : http

    // Callback function for the request
    let req = port.request(options, (res) => {
        let output = ''
        res.setEncoding('utf8')

        // Listener to receive data
        res.on('data', (chunk) => {
            output += chunk
        });

        // Listener for intializing callback after receiving complete response
        res.on('end', () => {
            let obj = JSON.parse(output)
            callback(res.statusCode, obj)
        });
    });

   // Handle any errors occurred while making request
    req.on('error', (err) => {
        //res.send('error: ' + err.message)
    });

    // Request is made here, with data as string or buffer
    req.write(post_data)
    // Ending the request
    req.end()
};

let callPost = () => {

    let data = {
        'name': 'Jon',
        'message': 'hello, world'
    }

    let options = {
        host: 'domain.name',       // Your domain name
        port: 443,                 // 443 for https and 80 for http
        path: '/path/to/resource', // Path for the request
        method: 'POST',            
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(data)
        }
    }

    postJSON(options, data, (statusCode, result) => {
        // Handle response
        // Process the received data
    });

}






發布休息/ JSON請求
我們可以簡單地使用請求包並保存我們必鬚髮送的Json變量的值。

首先通過npm install request --save在您的控制台安裝require軟件包

var request = require('request');

    var options={
                'key':'28',
                'key1':'value',
                'key2':'value'
                }

    request({
             url:"http://dev.api.ean.com/ean-services/rs/hotel/v3/ping?                      
                 minorRev="+options.key+
                 "&cid="+options.key1+
                 "&apiKey="+options.key2,
             method:"POST",
             json:true},function(error,response,body){
                     console.log(body)
               }
    );



我使用RestlerNeedle進行生產。 它們比原生的httprequest功能強大得多。 可以使用基本身份驗證,特殊頭文件甚至上傳/下載文件進行請求。

至於post / get操作,它們比使用httprequest的原始ajax調用要簡單得多。

needle.post('https://my.app.com/endpoint', {foo:'bar'}, 
    function(err, resp, body){
        console.log(body);
});



發布使用其他配置選項和自定義標頭的axios.post請求的另一個axios示例。

var postData = {
  email: "test@test.com",
  password: "password"
};

let axiosConfig = {
  headers: {
      'Content-Type': 'application/json;charset=UTF-8',
      "Access-Control-Allow-Origin": "*",
  }
};

axios.post('http://<host>:<port>/<path>', postData, axiosConfig)
.then((res) => {
  console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
  console.log("AXIOS ERROR: ", err);
})




如果你正在尋找基於承諾的HTTP請求, axios很好地完成了它的工作。

  const axios = require('axios');

  axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });



Related