[英]How to set Content-Length when sending POST request in NodeJS?
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:如果我將整個url輸入到瀏覽器地址欄並按Enter鍵,我將按預期獲得JSON響應。
事實證明,當您確實想要發出POST請求時,給定問題的解決方案顯然是將options對象的“headers”字段設置為包含“Content-Length”字段。
看這里的代碼:
我想你錯過了兩件事。 假設p既是你的端點又是你的url編碼的有效載荷 。
您可以將p變量分成兩個api路徑,以及在結束請求之前需要寫入的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.