2011-11-24 50 views
7
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); 
}); 

Khi tôi chạy mã trên, tôi nhận được lỗi dưới đây. nhắnCách đặt Độ dài nội dung khi gửi yêu cầu POST trong NodeJS?

lỗi:

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 

Làm thế nào để sửa lỗi Abobe?
Tôi đã cố gắng làm dưới đây

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} 

Nhưng nếu tôi cố gắng theo cách này tôi nhận được dưới đây lỗi:

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

Ai có thể giúp tôi về vấn đề này?

Cảm ơn
KOTI

PS: Nếu tôi nhập toàn bộ url vào thanh địa chỉ trình duyệt và nhấn enter Tôi nhận JSON phản ứng như mong đợi.

+2

xin vui lòng không sử dụng data.length, tôi gặp vấn đề này và tác giả cho biết không sử dụng data.length, thay vào đó, sử dụng Buffer.byteLength (dữ liệu). Ref question: http://stackoverflow.com/questions/18692580/node-js-post-causes-error-socket-hang-up-code-econnreset và vấn đề ref: https://github.com/visionmedia/express/ vấn đề/1749 –

Trả lời

-3

tôi có thể giải quyết vấn đề này bằng cách thay đổi phương pháp từ POST để GET

Cảm ơn KOTI

+0

bạn vẫn đang gặp vấn đề này? Nó đã được khắc phục? Bạn đang sử dụng phiên bản nút nào? Tôi đang đối mặt với cùng một vấn đề. Nó trông giống như vấn đề với nút. Bạn đã tìm thấy gì chưa? – Somnath

+2

Câu hỏi của bạn là về các yêu cầu POST, vì vậy việc thay đổi thành yêu cầu GET không phải là câu trả lời. – Atrahasis

6

Nó chỉ ra rằng giải pháp cho vấn đề nhất định, khi bạn làm muốn thực hiện một Yêu cầu POST, rõ ràng là đặt trường "tiêu đề" của đối tượng tùy chọn để chứa trường 'Độ dài nội dung'.

Xem mã ở đây:

How to make an HTTP POST request in node.js?

+1

Nhưng làm thế nào để bạn tìm ra giá trị phù hợp để đưa vào trường độ dài nội dung? Tôi có một phản ứng json, và tôi nhận được một lỗi 'ERR_CONTENT_LENGTH_MISMATCH'. Tự hỏi làm cách nào tôi có thể đặt giá trị phù hợp để dừng lỗi này. –

+1

@UlyssesAlves bạn chỉ có thể đặt nó theo chiều dài của chuỗi đại diện cho JSON. Đó có phải là không làm việc cho bạn? –

2
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(); 
    }); 

}); 
3

tôi nghĩ rằng bạn đang thiếu hai điều. Giả sử p là cả điểm cuốitải trọng được mã hóa url của bạn.

Bạn có thể chia biến p của mình thành cả hai đường dẫn api và tải trọng post_data bạn cần phải viết trước khi kết thúc yêu cầu.

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(); 

Hy vọng điều đó sẽ hữu ích !!

Các vấn đề liên quan