【问题标题】:Simple NodeJS http request equivalent for curl与 curl 等效的简单 NodeJS http 请求
【发布时间】:2017-02-19 22:18:29
【问题描述】:

我无法通过 nodeJS 将有效的 curl 转换为等效的 http 请求。我正在使用 Request 模块,但在发出请求时我似乎做错了什么。当我运行它时,它给了我

body: Cannot POST /path

不确定如何调试,有什么想法吗?

var data = JSON.stringify({
  'sender': {
    'name': 'name',
    'handle': 'handle'
  }, 
  'subject': 'Title here',
  'body': 'something something',
  'metadata': {}
});

var options = {
    host: 'website.com',
    path: '/path',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer <token>',
        'Accept': 'application/json',
        'Content-Length': Buffer.byteLength(data)
    }
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});
req.write(data);
req.end();

下面是我尝试为上述 nodejs 制作的等效 curl(有效)。

curl --include \
    --request POST \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer <token>" \
    --header "Accept: application/json" \
    --data-binary "{
    \"sender\": {
       \"name\": \"name\",
       \"handle\": \"handle\"
    },
    \"subject\": \"Title here\",
    \"body\": \"something something\",
    \"metadata\": {}
    }" \
    'website.com/path"

【问题讨论】:

    标签: node.js curl


    【解决方案1】:

    您可以使用 json 参数直接将 JSON 数据包含在 request 库中:

    var request = require('request');
    
    var options = {
        uri: 'http://website.com/path',
        method: 'POST',
        headers: {
            'Authorization': 'Bearer <token>',
            'Accept': 'application/json'
        },
        json: {
            'sender': {
                'name': 'name',
                'handle': 'handle'
            },
            'subject': 'Title here',
            'body': 'something something',
            'metadata': {}
        }
    };
    
    var req = request(options, function(error, response, body) {
    
        if (error) {
            console.log(error);
            return;
        }
        if (response.statusCode == 200) {
            console.log(body);
        } else {
            console.log("receive status code : " + response.statusCode);
        }
    });
    

    来自request options doc

    json - 将 body 设置为 JSON 表示的值并添加 内容类型:应用程序/json 标头。此外,解析 响应正文为 JSON。

    【讨论】:

    • 谢谢!我无法理解文档并寻找示例,但这似乎澄清了它。我认为必须在定义请求后发送数据
    • 很高兴它有帮助,如果它对您有好处,您可以接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2014-07-01
    • 2017-07-30
    • 2017-10-17
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多