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

Cuando ejecuto el código anterior, estoy obteniendo el error por debajo. mensaje¿Cómo se configura Content-Length cuando se envía una solicitud POST en NodeJS?

error:

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 

cómo solucionar el error Abobe?
He intentado hacer a continuación

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} 

Pero si trato de esta manera me estoy haciendo a continuación error:

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

Puede alguien me ayude en esto?

Gracias
Koti

PS: Si entro en toda la URL en la barra de direcciones del navegador y pulsa enter estoy recibiendo respuesta JSON como se esperaba.

+2

por favor, no use data.length, me encontré con este problema y el autor dijo que no utilice data.length, en su lugar, utilice Buffer.byteLength (datos). Pregunta de referencia: http://stackoverflow.com/questions/18692580/node-js-post-causes-error-socket-hang-up-code-econnreset y ref issue: https://github.com/visionmedia/express/ issues/1749 –

Respuesta

-3

soy capaz de resolver este problema cambiando el método de POST a GET

Gracias Koti

+0

¿Todavía te enfrentas a este problema? ¿Esta arreglado? ¿Qué versión de nodo estás usando? Estoy enfrentando el mismo problema. Parece un problema con el nodo. ¿Has encontrado algo? – Somnath

+2

Su pregunta era acerca de las solicitudes POST, por lo que cambiar a las solicitudes GET no es una respuesta. – Atrahasis

6

Resulta que la solución al problema dado, cuando hace quiere hacer una La solicitud POST aparentemente consiste en configurar el campo "encabezados" del objeto de opciones para que contenga un campo "Contenido-Longitud".

Ver código aquí:

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

+1

¿Pero cómo encuentras el valor correcto para poner en el campo de longitud de contenido? Tengo una respuesta json, y me aparece un error 'ERR_CONTENT_LENGTH_MISMATCH'. Me pregunto cómo puedo configurarlo para que deje de tener este error. –

+1

@UlyssesAlves solo debe poder establecerlo a la longitud de la cadena que representa el JSON. ¿Eso no está funcionando para ti? –

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

creo que se está perdiendo dos cosas. Suponiendo que p es su punto final y su carga útil codificada en url.

Puede dividir su variable p en la ruta de la API y la carga de datos post_data que necesita escribir antes de finalizar la solicitud.

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 !!

Cuestiones relacionadas