我应该如何在http post请求的请求有效负载中传递json数据

Posted

技术标签:

【中文标题】我应该如何在http post请求的请求有效负载中传递json数据【英文标题】:How should I pass json data in the request payload of http post request 【发布时间】: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();

【问题讨论】:

这能回答你的问题吗? ***.com/questions/4505809/… 【参考方案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)
    );

【讨论】:

以上是关于我应该如何在http post请求的请求有效负载中传递json数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在scrapy中发送带有标头和有效负载的Post请求

Axios POST 请求 413(有效负载太大)

Apache HTTP/2 客户端 5.0 POST 请求缺少有效负载/内容

如何为 POST 请求创建 json 有效负载?

从 Java servlet 中的 POST 请求获取请求有效负载

注销请求应该设计为 GET 还是 POST?