Javascript 在NodeJS中发送POST请求时如何设置内容长度?
当我运行上面的代码时,我得到了下面的错误 错误消息:Javascript 在NodeJS中发送POST请求时如何设置内容长度?,javascript,post,node.js,request,content-length,Javascript,Post,Node.js,Request,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
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);
});
如何修复abobe错误?我试过在下面做
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
但如果我这样做,我会得到以下错误:
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}
有人能帮我吗
谢谢科蒂
PS:如果我在浏览器地址栏中输入整个url并按enter键,我将得到预期的JSON响应 我可以通过将方法从POST更改为GET来解决这个问题 谢谢
koti事实证明,当您确实想要发出POST请求时,解决给定问题的方法显然是将options对象的“headers”字段设置为包含“Content Length”字段 请参见此处的代码:
我认为你遗漏了两件事。 假设p既是您的端点又是您的url编码负载 您可以将p变量拆分为api路径和结束请求之前需要写入的post_数据有效负载
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();
});
});
希望能有帮助 请不要使用data.length,我突然提到这个问题,作者说不要使用data.length,而是使用Buffer.bytellength(数据)。参考问题:和参考问题:你仍然面临这个问题吗?修好了吗?您正在使用哪个版本的节点?我也面临同样的问题。它看起来像是节点的问题。你找到什么了吗?你的问题是关于POST请求的,所以更改为GET请求并不是一个答案。但是你如何找到正确的内容长度字段值呢?我有一个json响应,我得到一个
ERR\u CONTENT\u LENGTH\u MISMATCH
错误。不知道如何将其设置为正确的值以停止获取此错误。@UlyssesAlves您应该能够将其设置为表示JSON的字符串的长度。这对您不起作用吗?长度应该是字节,而不是字符数
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();
});
});
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();