【问题标题】:How should I pass json data in the request payload of http post request我应该如何在http post请求的请求有效负载中传递json数据
【发布时间】:2013-04-17 18:38:27
【问题描述】:

我想知道,如何在payload中传递json请求,例如:{'name' : 'test', 'value' : 'test'}:

var post_data = {};

var post_options = {
  host: this._host,
  path: path,
  method: 'POST',
  headers: {
    Cookie: "session=" + session,
    'Content-Type': 'application/json',
    'Content-Length': post_data.length,
  }
};

// Set up the request
var post_req = http.request(post_options, function (res) {
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('========Response========: ' + chunk);
  });
});

// post the data
post_req.write(post_data);
post_req.end();

【问题讨论】:

标签: javascript json node.js payload


【解决方案1】:

使用request 模块

npm install -S request

var request = require('request')

var postData = {
  name: 'test',
  value: 'test'
}

var url = 'https://www.example.com'
var options = {
  method: 'post',
  body: postData,
  json: true,
  url: url
}
request(options, function (err, res, body) {
  if (err) {
    console.error('error posting json: ', err)
    throw err
  }
  var headers = res.headers
  var statusCode = res.statusCode
  console.log('headers: ', headers)
  console.log('statusCode: ', statusCode)
  console.log('body: ', body)
})

【讨论】:

  • 我想在这里和你核实一些事情。 'body: postData' 是否正确或应该将 postData 字符串化,如 'body: JSON.stringify(postData); ?谢谢。
  • @Noah 如果我想使用request.post(...),会有什么变化?客户端应用程序(Electron 应用程序)将发送的大多数请求都包含基于 JSON 的主体,唯一的例外是多部分主体。我在想出在 Express(服务器端)应用程序中使用此库和 bodyParser 设置的正确方法时遇到了麻烦。我使用app.use(bodyParser.json())app.use(bodyParser.urlencoded({ extended: true })); 并且请求无法解析,直到我将extended 更改为false。不确定这与 JSON 请求有什么关系,这是我感到困惑的原因。
  • @Ric 通常你是对的,但是添加 json: true 让请求知道它应该在发送之前对有效负载进行字符串化。
【解决方案2】:

只需转换为字符串并发送即可。

post_req.write(JSON.stringify(post_data));

【讨论】:

    【解决方案3】:

    我试过了,它似乎可以工作。我需要基本的身份验证,所以我已经包含了身份验证,如果你不需要它,你可以丢弃它。

    var value = {email:"",name:""};
    
     var options = {
            url: 'http://localhost:8080/doc/',
            auth: {
                user: username,
                password: password
            },
            method :"POST",
            json : value,
    
        };
    
        request(options, function (err, res, body) {
            if (err) {
                console.dir(err)
                return
            }
            console.dir('headers', res.headers)
            console.dir('status code', res.statusCode)
            console.dir(body)
        });
    

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多