Node.js https.post request
本问题已经有最佳答案,请猛点这里访问。
我正在使用Node.js,我需要将包含特定数据的POST请求发送到外部服务器。 我正在使用GET做同样的事情,但这更容易,因为我不必包含额外的数据。 所以,我的工作GET请求如下:
1 2 3 4 5 6 7 8 9 10 | var options = { hostname: 'internetofthings.ibmcloud.com', port: 443, path: '/api/devices', method: 'GET', auth: username + ':' + password }; https.request(options, function(response) { ... }); |
所以我想知道如何用POST请求做同样的事情,包括如下数据:
1 2 3 4 5 6 7 8 | type: deviceType, id: deviceId, metadata: { address: { number: deviceNumber, street: deviceStreet } } |
谁能告诉我如何将这些数据包含在上面的选项中? 提前致谢!
在options对象中,您可以像在GET请求中一样包含请求选项,并在POST的正文中再创建一个包含所需数据的对象。 您使用查询字符串函数(需要通过
请务必注意,您的选项对象中需要两个额外的标头才能成功发布请求。 这些是 :
1 2 | 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': postBody.length |
所以你可能需要在querystring.stringify返回后初始化你的选项对象。 否则,您将不知道字符串化正文数据的长度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | var querystring = require('querystring') var https = require('https') postData = { //the POST request's body data type: deviceType, id: deviceId, metadata: { address: { number: deviceNumber, street: deviceStreet } } }; postBody = querystring.stringify(postData); //init your options object after you call querystring.stringify because you need // the return string for the 'content length' header options = { //your options which have to include the two headers headers : { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': postBody.length } }; var postreq = https.request(options, function (res) { //Handle the response }); postreq.write(postBody); postreq.end(); |