node.js-如何使用Cookie创建HTTP客户端请求?

我有一个node.js Connect服务器,用于检查请求的Cookie。 为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。 我知道HTTP请求对此具有'cookie'标头,但我不确定如何设置和发送它-我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块, 但似乎没有让我添加该标头。

关于如何使用硬编码Cookie和POST数据向服务器发出请求的任何建议?

Vanwaril asked 2020-07-09T07:08:55Z
3个解决方案
51 votes

该答案已弃用,请参阅下面的@ankitjaininfo答案,以获取更现代的解决方案


这就是我认为您仅使用节点http库发出包含数据和cookie的POST请求的方式。 此示例发布JSON,如果发布其他数据,则相应地设置您的content-type和content-length。

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

您在Cookie值中发送的内容实际上应取决于您从服务器收到的内容。 Wikipedia对这些内容的撰写相当不错:[http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes]

RandomEtc answered 2020-07-09T07:09:47Z
38 votes

现在不建议使用http.createClient。 您可以按以下方式在选项集合中传递标题。

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();
ankitjaininfo answered 2020-07-09T07:10:07Z
2 votes

您可以使用Requestify(一个我为nodeJS编写的非常简单,很酷的HTTP客户端)来做到这一点,它支持轻松使用Cookie,还支持缓存。

要执行带有Cookie的请求,只需执行以下操作:

var requestify = require('requestify');
requestify.post('http://google.com', {}, {
    cookies: {
        sessionCookie: 'session-cookie-data'   
    }
});
ranm8 answered 2020-07-09T07:10:32Z
translate from https://stackoverflow.com:/questions/4579757/how-do-i-create-a-http-client-request-with-a-cookie