How to set Content-Length when sending POST request in NodeJS?
Solution 1
It turns out that the solution to the given problem, when you do want to make a POST request, is apparently to set the "headers" field of the options object to contain a 'Content-Length' field.
See code here:
How to make an HTTP POST request in node.js?
Solution 2
i think you're missing two things. Assuming p is both your endpoint and your url-encoded payload.
You could split your p variable into the both api path, and the post_data payload you need to write before ending the request.
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();
Hope it helps!!
Solution 3
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();
});
});
Comments
-
ekanna almost 2 years
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); });
When i run the above code i am getting below error.
error message:
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
How to fix the abobe error?
I have tried doing belowvar 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}
But if I try this way I am getting below error:
{ stack: [Getter/Setter], arguments: undefined, type: undefined, message: 'socket hang up' }
Can anybody help me on this?
Thanks
kotiPS:If I enter the whole url into browser address bar and hit enter I am getting JSON response as expected.
-
Somnath about 10 yearsare you still facing this issue? Is it fixed? Which version of node you are using? I'm facing the same issue. Its looking like issue with node. Have you found anything?
-
Mouloud85 almost 8 yearsYour question was about POST requests, so changing to GET requests is not an answer.
-
Ulysses Alves about 7 yearsBut how do you find out the right value to put on the content-length field? I have a json response, and I'm getting an
ERR_CONTENT_LENGTH_MISMATCH
error. Wonder how I can set it to the right value to stop getting this error. -
John Clements about 7 years@UlyssesAlves you should just be able to set it to the length of the string representing the JSON. Is that not working for you?
-
Muhammad Umer almost 5 yearslength is suppose to be in bytes not number of characters