1. 程式人生 > >nodejs http.request 引數格式之querystring

nodejs http.request 引數格式之querystring

測試程式碼


let show = (msg) => {
    console.log(msg)
}

const http = require('http');
const querystring = require('querystring');//注意:一個字串的包

const postData = JSON.stringify({ //錯誤
    'license': '2016-8-20;50;50;50;50:0:2:1;yes;yes;50;50;50:0:0:0;50;3;1;0;50;50;yes;0;50\n'
});
//const postData = querystring.stringify({ //
正確 // 'licnese': '2016-8-20;50;50;50;50:0:2:1;yes;yes;50;50;50:0:0:0;50;3;1;0;50;50;yes;0;50\n' //}); const opt = { hostname: '192.168.1.1', port: 5000, path: '/api/test', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) }, timeout
:10*1000 } let req = http.request(opt, (res) => { // show(`res:${res}`); // show(`status:${res.statusCode}`) // show(`header:${res.headers}`) res.setEncoding('utf8'); res.on('data', (result) => { show(`Response data:${result}`); }) res.on('end', () => { show(`Request send finish
`) }) })
req.setTimeout(opt.timeout,()=>{ show(`request timeout...`) req.abort();// 超時則銷燬請求 否則會程式會block住 }) req.on('error', (e) => { show(`problem with request:${e.message}`); }) // 傳送的引數 注意:必須是字串 req.write(postData); req.end();

上面例子用http.request像http://192.168.1.1:5000/api/test傳送了一個post請求,併發送了一個license=’2016-8-20;50;50;50;50:0:2:1;yes;yes;50;50;50:0:0:0;50;3;1;0;50;50;yes;0;50\n’的字串資料

測試現象

1.用JSON.parse傳輸body資料,在伺服器抓包接受的資料如下
JSON.parse傳輸引數
2.用querystring元件傳輸body資料,在伺服器抓包的資料如下
querystring傳輸引數

總結:

  1. http.request post傳參不能傳輸json物件,只接受字串
  2. 字串不能用JSON.stringify包裝,否則會被當做key傳輸,伺服器body接受為”key:value”:”“
  3. 用querystring包裝引數,伺服器可正確解析,伺服器body接受為”key”:”value”