How do I create a HTTP Client Request with a cookie?

后端 未结 3 982
无人及你
无人及你 2020-12-07 18:29

I\'ve got a node.js Connect server that checks the request\'s cookies. To test it within node, I need a way to write a client request and attach a cookie to it. I understa

相关标签:
3条回答
  • 2020-12-07 19:17

    You can do that using Requestify, a very simple and cool HTTP client I wrote for nodeJS, it support easy use of cookies and it also supports caching.

    To perform a request with a cookie attached just do the following:

    var requestify = require('requestify');
    requestify.post('http://google.com', {}, {
        cookies: {
            sessionCookie: 'session-cookie-data'   
        }
    });
    
    0 讨论(0)
  • 2020-12-07 19:26

    This answer is deprecated, please see @ankitjaininfo's answer below for a more modern solution


    Here's how I think you make a POST request with data and a cookie using just the node http library. This example is posting JSON, set your content-type and content-length accordingly if you post different data.

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

    What you send in the Cookie value should really depend on what you received from the server. Wikipedia's write-up of this stuff is pretty good: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes

    0 讨论(0)
  • 2020-12-07 19:29

    The use of http.createClient is now deprecated. You can pass Headers in options collection as below.

    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();
    
    0 讨论(0)
提交回复
热议问题