没有任何第三方模块的情况下,如何在Node Js中进行https发布?


74

我正在一个需要https get和post方法的项目中。我有一个简短的https.get函数在这里工作...

const https = require("https");

function get(url, callback) {
    "use-strict";
    https.get(url, function (result) {
        var dataQueue = "";    
        result.on("data", function (dataBuffer) {
            dataQueue += dataBuffer;
        });
        result.on("end", function () {
            callback(dataQueue);
        });
    });
}

get("https://example.com/method", function (data) {
    // do something with data
});

我的问题是没有https.post,我已经在这里使用https模块尝试了http解决方案。如何在node.js中发出HTTP POST请求?但返回控制台错误。

我在浏览器中使用get和post与Ajax到相同的api都没有问题。我可以使用https.get来发送查询信息,但是我认为这不是正确的方法,并且如果我决定扩展的话,我认为它不会在以后发送文件。

有没有一个最低要求的小示例,可以发出一个https.request如果存在一个https.post,它将是什么?我不想使用npm模块。



2
@congusbongus:不完全是因为这个问题是关于HTTPS的,不同于HTTP ...
Didier68 '18

Answers:


174

例如,像这样:

const querystring = require('querystring');
const https = require('https');

var postData = querystring.stringify({
    'msg' : 'Hello World!'
});

var options = {
  hostname: 'posttestserver.com',
  port: 443,
  path: '/post.php',
  method: 'POST',
  headers: {
       'Content-Type': 'application/x-www-form-urlencoded',
       'Content-Length': postData.length
     }
};

var req = https.request(options, (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(e);
});

req.write(postData);
req.end();

45
好答案@aring。如果要发送JSON,请更改以下内容:var postData = JSON.stringify({msg: 'Hello World!'})'Content-Type': 'application/json'
loonison101 '17

1
谢谢-我发现使用require('http')并将选项中的port设置为443的困难方法不是发送HTTP请求的正确方法。
tschumann '20

4
我假设这req.write(postData);将是数据的发布,对吗?我有数据从我发布的地方返回,并在终端中以JSON获取输出数据。如何将数据保存到从中获取的变量中?
JamLizzy101 '20
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.