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

Quando eseguo il codice sopra riportato, viene visualizzato l'errore. messaggioCome impostare Content-Length quando si invia la richiesta POST in NodeJS?

errore:

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 

Come risolvere l'errore Abobe?
Ho provato a fare sotto

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} 

Ma se provo in questo modo sto ottenendo sotto l'errore:

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

Qualcuno può aiutarmi su questo?

Grazie
Koti

PS: Se entro l'intero URL nella barra degli indirizzi del browser e premere Invio sto ottenendo risposta JSON come previsto.

+2

Si prega di non utilizzare data.length, ho urtato a questo problema e autore ha detto non utilizzare data.length, invece, utilizzare Buffer.byteLength (dati). Domanda di riferimento: http://stackoverflow.com/questions/18692580/node-js-post-causes-error-socket-hang-up-code-econnreset e ref issue: https://github.com/visionmedia/express/ problemi/1749 –

risposta

-3

sono in grado di risolvere questo problema modificando il metodo da POST a GET

Grazie Koti

+0

stai ancora affrontando questo problema? È fisso? Quale versione di nodo stai usando? Sto affrontando lo stesso problema. Sembra un problema con il nodo. Hai trovato qualcosa? – Somnath

+2

La tua domanda riguardava le richieste POST, quindi passare alle richieste GET non è una risposta. – Atrahasis

6

Si scopre che la soluzione al problema dato, quando si fai vuole fare una La richiesta POST, apparentemente, imposta il campo "intestazioni" dell'oggetto opzioni per contenere un campo "Content-Length".

vedi codice qui:

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

+1

Ma come si scopre il giusto valore da inserire nel campo della lunghezza del contenuto? Ho una risposta JSON e sto ricevendo un errore 'ERR_CONTENT_LENGTH_MISMATCH'. Mi chiedo come posso impostarlo al valore giusto per non ricevere questo errore. –

+1

@UlyssesAlves dovresti essere in grado di impostarlo sulla lunghezza della stringa che rappresenta il JSON. Non funziona per te? –

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

penso che vi state perdendo due cose. Supponendo che p sia l'punto finale e il carico utile codificato nell'URL .

È possibile dividere la variabile p in entrambi i percorsi API e il carico utile post_data che è necessario scrivere prima di terminare la richiesta.

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

Spero che sia d'aiuto !!

Problemi correlati