Hoe maak ik een HTTP-clientverzoek met een cookie?

Ik heb een node.js Connect-server die de cookies van het verzoek controleert. Om het binnen het knooppunt te testen, heb ik een manier nodig om een ​​klantverzoek te schrijven en er een cookie aan toe te voegen. Ik begrijp dat HTTP-verzoeken hiervoor de ‘cookie’-header hebben, maar ik weet niet zeker hoe ik het moet instellen en verzenden – ik moet ook POST-gegevens in hetzelfde verzoek verzenden, dus ik gebruik momenteel de restler-module van danwrong, maar het lijkt erop dat ik die kop niet kan toevoegen.

Enige suggesties over hoe ik een verzoek kan indienen bij de server met zowel een hard-coded cookie als POST-gegevens?


Antwoord 1, autoriteit 100%

Dit antwoord is verouderd, zie het antwoord van @ankitjaininfo hierondervoor een modernere oplossing


Zo denk ik dat je een POST-verzoek doet met gegevens en een cookie met alleen de http-bibliotheek van het knooppunt. Dit voorbeeld is het posten van JSON, stel uw inhoudstype en inhoudslengte overeenkomstig in als u verschillende gegevens plaatst.

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

Wat u in de Cookie-waarde verzendt, moet echt afhangen van wat u van de server hebt ontvangen. Wikipedia’s beschrijving van dit spul is redelijk goed: http://en.wikipedia.org/wiki /HTTP_cookie#Cookie_attributes


Antwoord 2, autoriteit 87%

Het gebruik van http.createClientis nu afgeschaft. U kunt Headers doorgeven in de optiesverzameling zoals hieronder.

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

Antwoord 3, autoriteit 2%

Je kunt dat doen met Requestify, een heel eenvoudige en coole HTTP-client die ik voor nodeJS heb geschreven. ondersteunt eenvoudig gebruik van cookies en ondersteunt ook caching.

Als u een verzoek met een bijgevoegde cookie wilt uitvoeren, doet u het volgende:

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

Other episodes