Jak utworzyć żądanie klienta HTTP za pomocą pliku cookie?

Mam węzeł.serwer js Connect, który sprawdza pliki cookie żądania. Aby przetestować go w node, potrzebuję sposobu na napisanie żądania klienta i dołączenie do niego pliku cookie. Rozumiem, że żądania HTTP mają do tego nagłówek "cookie", ale nie jestem pewien, jak go ustawić i wysłać-muszę również wysłać dane postu w tym samym żądaniu, więc obecnie używam modułu restler danwronga, ale nie pozwala mi dodać tego nagłówka.

Wszelkie sugestie jak Mogę złożyć prośbę do serwera z mocno zakodowanym ciasteczkiem i danymi pocztowymi?

Author: Vanwaril, 2011-01-02

3 answers

Oto jak myślę, że robisz żądanie POST z danymi i ciasteczkiem używając tylko biblioteki http węzła. Ten przykład to publikowanie JSON, odpowiednio ustaw typ treści i długość treści, jeśli publikujesz różne dane.

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

To, co wysyłasz w wartości Cookie powinno naprawdę zależeć od tego, co otrzymałeś z serwera. Zapis Wikipedii o tym jest całkiem niezły: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes

 49
Author: RandomEtc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 23:35:25

Użycie http.createClient jest obecnie przestarzałe. Możesz przekazać nagłówki w options collection, jak poniżej.

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();
 30
Author: ankitjaininfo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-14 09:17:42

Możesz to zrobić za pomocą Requestify , bardzo prostego i fajnego klienta HTTP, który napisałem dla nodeJS, obsługuje łatwe korzystanie z plików cookie, a także obsługuje buforowanie.

Aby wykonać żądanie z dołączonym ciasteczkiem, wykonaj następujące czynności:

var requestify = require('requestify');
requestify.post('http://google.com', {}, {
    cookies: {
        sessionCookie: 'session-cookie-data'   
    }
});
 1
Author: ranm8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-18 18:22:56