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

जब मैं उपरोक्त कोड चलाता हूं तो मुझे नीचे त्रुटि मिल रही है।नोडजेएस में POST अनुरोध भेजते समय सामग्री-लंबाई कैसे सेट करें?

त्रुटि संदेश:

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' } 

किसी को भी इस पर मेरी मदद कर सकते हैं?

धन्यवाद
कोटि

पुनश्च: अगर मैं डालें पूरे यूआरएल डालें और enter की उम्मीद के रूप में मैं JSON उत्तर हो रही है मारा।

+2

कृपया डेटा का उपयोग न करें। लम्बाई, मैंने इस मुद्दे पर टक्कर लगी और लेखक ने कहा कि डेटा का उपयोग न करें। इसके बजाय, Buffer.byteLength (डेटा) का उपयोग करें। रेफरी सवाल: http://stackoverflow.com/questions/18692580/node-js-post-causes-error-socket-hang-up-code-econnreset और ref issue: https://github.com/visionmedia/express/ मुद्दे/1749 –

उत्तर

-3

मैं पद से विधि बदलकर इस समस्या को हल करने के लिए

धन्यवाद कर रहा हूँ कोटि

+0

क्या आप अभी भी इस मुद्दे का सामना कर रहे हैं? क्या यह तय है? आप किस नोड का उपयोग कर रहे हैं? मुझे एक ही समस्या का सामना करना पड़ रहा है। यह नोड के साथ समस्या की तरह लग रहा है। क्या आपको कुछ मिला है? – Somnath

+2

आपका प्रश्न POST अनुरोधों के बारे में था, इसलिए GET अनुरोधों में बदलना कोई जवाब नहीं है। – Atrahasis

6

ऐसा लगता है कि इस समस्या का समाधान है, जब आप कर एक बनाना चाहते POST अनुरोध, स्पष्ट रूप से 'ऑब्जेक्ट-लम्बाई' फ़ील्ड रखने के लिए विकल्प ऑब्जेक्ट के "हेडर" फ़ील्ड को सेट करने के लिए है।

यहाँ कोड देखें:

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

+1

लेकिन सामग्री-लंबाई फ़ील्ड को रखने के लिए आपको सही मूल्य कैसे पता चलता है? मेरे पास एक जेसन प्रतिक्रिया है, और मुझे एक 'ERR_CONTENT_LENGTH_MISMATCH' त्रुटि मिल रही है। आश्चर्य है कि मैं इस त्रुटि को रोकने के लिए इसे सही मूल्य पर कैसे सेट कर सकता हूं। –

+1

@UlyssesAlves आपको बस JSON का प्रतिनिधित्व करने वाली स्ट्रिंग की लंबाई तक सेट करने में सक्षम होना चाहिए। क्या यह आपके लिए काम नहीं कर रहा है? –

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

मैं आपको दो बातें भूल रहे हैं लगता है। मानना ​​पी आपके एंडपॉइंट और आपके url-encoded पेलोड दोनों मानते हैं।

आप अपने पी चर को दोनों एपीआई पथ में विभाजित कर सकते हैं, और 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(); 

उम्मीद है कि यह मदद करता है !!

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^