在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