在NodeJS中发送POST请求时如何设置Content-Length?

var https = require('https'); var p = '/api/username/FA/AA?ZOHO_ACTION=EXPORT&ZOHO_OUTPUT_FORMAT=JSON&ZOHO_ERROR_FORMAT=JSON&ZOHO_API_KEY=dummy1234&ticket=dummy9876&ZOHO_API_VERSION=1.0'; var https = require('https'); var options = { host: 'reportsapi.zoho.com', port: 443, path: p, method: 'POST' }; var req = https.request(options, function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }); req.end(); req.on('error', function(e) { console.error(e); }); 

当我运行上面的代码,我得到以下错误。

错误信息:

 statusCode: 411 headers: { 'content-type': 'text/html', 'content-length': '357', connection: 'close', date: 'Thu, 24 Nov 2011 19:58:51 GMT', server: 'ZGS', 'strict-transport-security': 'max-age=604800' } "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 411 - Length Required 

如何解决abobe错误?
我试过下面

 var qs = 'ZOHO_ACTION=EXPORT&ZOHO_OUTPUT_FORMAT=JSON&ZOHO_ERROR_FORMAT=JSON&ZOHO_API_KEY=dummy1234&ticket=dummy9876&ZOHO_API_VERSION=1.0'; ' options.headers = {'Content-Length': qs.length} 

但是,如果我尝试这种方式,我得到以下错误:

 { stack: [Getter/Setter], arguments: undefined, type: undefined, message: 'socket hang up' } 

有人可以帮我吗?

谢谢
KOTI

PS:如果我input浏览器地址栏中的整个url,并按Enter键我正在得到预期的JSON响应。

事实certificate,对于给定问题的解决scheme,当您想要发出POST请求时,显然是将options对象的“headers”字段设置为包含“Content-Length”字段。

看到代码在这里:

如何在node.js中创buildHTTP POST请求?

我想你错过了两件事。 假设p是您的端点和您的url编码的有效载荷

在结束请求之前,你可以将你的pvariables分成两个apipath和post_data负载。

 var p = 'ZOHO_ACTION=EXPORT&ZOHO_OUTPUT_FORMAT=JSON&ZOHO_ERROR_FORMAT=JSON&ZOHO_API_KEY=dummy1234&ticket=dummy9876&ZOHO_API_VERSION=1.0'; var https = require('https'); var options = { host: 'reportsapi.zoho.com', port: 443, path: '/api/username/FA/AA', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(p) } } var req = https.request(options, function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }); req.write(p); req.end(); 

希望能帮助到你!!

 var server = http.createServer(); server.on('request', function(req, res) { req.on('data',function(data){ res.writeHead(200, {'Content-Type': 'text/plain','Content-Length':data.toString().length+''}); res.write(data.toString()); res.end(); }); }); 

我能够通过将方法从POST更改为GET来解决此问题

谢谢koti