【问题标题】:Trying to make a 'POST' request with node尝试使用节点发出“POST”请求
【发布时间】:2014-04-15 16:14:37
【问题描述】:

我正在尝试在 node.js 中使用请求或 http/https(或其他任何东西,如果这 2 不可能)来执行以下 cUrl 请求

curl -k -3 -X POST https://somedomain.com/rest/ \
 -H "customeHeader: customeHeader" \  // customer header
 -d '{ "email" : "foo@bar.com", "password" : "yourpassword" }' // data to post.

这是我目前得到的:

var options = {
        "hostname": "https://somedomain.com/rest/",
        "method": 'POST',
        "headers" : {
            "customeHeader" : "customeHeader"
        },
        "secureProtocol" : "SSLv3_method",
        "rejectUnauthorized" : false
    };

    var req = https.request(options, function(res) {
        res.on('data', function(d) {
            console.log(d);
            //process.stdout.write(d);
        });
    });
    req.end();

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

我认为我只是缺少 Post 字段(-d)或者以上完全错误

【问题讨论】:

  • 这在我看来是一个潜在问题:"hostname": "https://somedomain.com/rest/"。您提供的值不是主机名,而是 URL。 somedomain.com 是主机名。 http.request 方法采用 path 选项,您应该提供 URL 的其余部分。无论如何,如果您能告诉我们您遇到了什么错误(如果有的话),或者您遇到了什么行为以及它与您的预期有何不同,将会很有帮助。
  • Jordan 感谢上述提示,我刚刚弄清楚了,是的,协议/URI 不应该在主机名中提供,我现在唯一缺少的是如何/在哪里包含发布字段
  • 我想你会发现这篇文章中的答案和 cmets 很有用:stackoverflow.com/questions/6158933/…

标签: node.js http curl https


【解决方案1】:

您需要使用 req.write 编写您的 POST 正文:

req.write(JSON.stringify(someObj));

还将Content-Type 标头设置为application/json

这是一个完整的例子:

var request = require('https').request,
    parseUrl = require('url').parse;

var options = parseUrl('https://somedomain.com/rest');
options.method = 'POST';
options.headers = {
  'Content-Type': 'application/json'
};

var req = request(options, function (res) {
  res.on('data', function (d) {
    console.log(d.toString());
  });
});

req.write(JSON.stringify({a: 1, b: 2}));

req.end();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多