2011-01-02 20 views
36

Tengo un servidor de conexión node.js que verifica las cookies de la solicitud. Para probarlo dentro del nodo, necesito una forma de escribir una solicitud del cliente y adjuntarle una cookie. Entiendo que las Solicitudes HTTP tienen el encabezado 'cookie' para esto, pero no estoy seguro de cómo configurarlo y enviarlo. También necesito enviar datos POST en la misma solicitud, así que actualmente estoy usando el módulo restler de danwrong. pero parece que no me deja agregar ese encabezado.¿Cómo creo una solicitud de cliente HTTP con una cookie?

¿Alguna sugerencia sobre cómo puedo hacer una solicitud al servidor con una cookie codificada y datos POST?

Respuesta

47

Así es como creo que realiza una solicitud POST con datos y una cookie utilizando solo la biblioteca http del nodo. Este ejemplo es publicar JSON, establecer su tipo de contenido y longitud de contenido en consecuencia si publica datos diferentes.

// NB:- node's http client API has changed since this was written 
// this code is for 0.4.x 
// for 0.6.5+ see http://nodejs.org/docs/v0.6.5/api/http.html#http.request 

var http = require('http'); 

var data = JSON.stringify({ 'important': 'data' }); 
var cookie = 'something=anything' 

var client = http.createClient(80, 'www.example.com'); 

var headers = { 
    'Host': 'www.example.com', 
    'Cookie': cookie, 
    'Content-Type': 'application/json', 
    'Content-Length': Buffer.byteLength(data,'utf8') 
}; 

var request = client.request('POST', '/', headers); 

// listening to the response is optional, I suppose 
request.on('response', function(response) { 
    response.on('data', function(chunk) { 
    // do what you do 
    }); 
    response.on('end', function() { 
    // do what you do 
    }); 
}); 
// you'd also want to listen for errors in production 

request.write(data); 

request.end(); 

lo que usted envía en el valor Cookie realmente debería depender de lo que ha recibido del servidor. La descripción de Wikipedia de esto es bastante buena: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes

+0

¡Voy a mandar los datos JSON en sí, así que esto está muy bien, pero por su uniformidad con las otras pruebas, esperaba que hubiera una manera de hacer esto utilizando la biblioteca restler – Vanwaril

+1

veo, no fue claro de su pregunta que restler fue importante, lo siento. El archivo README en https://github.com/danwrong/restler dice que el método de publicación puede especificar encabezados en el argumento de opciones. Solo tiene que poner allí la cookie: 'rest.post (url, {data: 'your data', headers {Cookie: 'your cookie'}})' – RandomEtc

+0

Oh, probé la 'cookie' en minúscula. De todos modos, ya lo reescribí para usar el cliente http, así que pensaré en convertirlo más tarde. – Vanwaril

1

Puedes hacerlo usando Requestify, un cliente HTTP muy simple y genial que escribí para nodeJS, admite el uso fácil de cookies y también admite el almacenamiento en caché.

para realizar una solicitud con una galleta adjunta simplemente lo siguiente:

var requestify = require('requestify'); 
requestify.post('http://google.com', {}, { 
    cookies: { 
     sessionCookie: 'session-cookie-data' 
    } 
}); 
27

El uso de http.createClient ahora es obsoleto. Puede pasar encabezados en la recopilación de opciones de la siguiente manera.

var options = { 
    hostname: 'example.com', 
    path: '/somePath.php', 
    method: 'GET', 
    headers: {'Cookie': 'myCookie=myvalue'} 
}; 
var results = ''; 
var req = http.request(options, function(res) { 
    res.on('data', function (chunk) { 
     results = results + chunk; 
     //TODO 
    }); 
    res.on('end', function() { 
     //TODO 
    }); 
}); 

req.on('error', function(e) { 
     //TODO 
}); 

req.end(); 
+1

Esta debería ser la respuesta aceptada en 2014. – Lewis

+0

Gracias a un millón @ankitjaininfo. Estaba atrapado tratando de seguir lo que dice la documentación del nodo HTTP: "set-cookie y encabezados de cookies que se representan como una matriz de valores" [link] (https://nodejs.org/api/http.html#http_http) – Bludwarf

Cuestiones relacionadas