nodejs http.request 引數格式之querystring
阿新 • • 發佈:2019-02-07
測試程式碼
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資料,在伺服器抓包接受的資料如下
2.用querystring元件傳輸body資料,在伺服器抓包的資料如下
總結:
- http.request post傳參不能傳輸json物件,只接受字串
- 字串不能用JSON.stringify包裝,否則會被當做key傳輸,伺服器body接受為”key:value”:”“
- 用querystring包裝引數,伺服器可正確解析,伺服器body接受為”key”:”value”