我正在使用node.js发布http请求。如果我在'options'字段之前定义我的发布数据,代码可以使用,但是如果我最初将我的post_data字符串设置为空并稍后更新它,则它不会获取新的长度。我怎么能这样做呢?我希望将不同长度的多个帖子发送到循环中的相同位置,因此需要能够执行此操作。
var post_data=''; //if i set my string content here rather than later on it works
var options = {
host: '127.0.0.1',
port: 8529,
path: '/_api/cursor',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': post_data.length
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
post_data = 'a variable length string goes here';//the change in length to post_data is not //recognised
req.write(post_data);
req.end();
答案 0 :(得分:1)
'Content-Length': post_data.length
您在设置post_data
之前运行了此操作。
如果您想在创建对象后设置post_data
,则需要稍后手动设置:
options.headers['Content-Length'] = post_data.length;
请注意,您必须在调用http.request()
之前进行设置。
答案 1 :(得分:0)
发布数据是一个问题,就是发送一个查询字符串(就像你用它后用URL发送它的方式一样)作为请求体。
这还需要声明Content-Type和Content-Length值,以便服务器知道如何解释数据。
var querystring = require('querystring');
var data = querystring.stringify({
username: yourUsernameValue,
password: yourPasswordValue
});
var options = {
host: 'my.url',
port: 80,
path: '/login',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': data.length
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log("body: " + chunk);
});
});
req.write(data);
req.end();
答案 2 :(得分:0)
您需要替换:
'Content-Length': post_data.length
有:
'Content-Length': Buffer.byteLength(post_data, 'utf-8')