Как создать HTTP-запрос клиента с помощью файла cookie? - PullRequest
44 голосов
/ 02 января 2011

У меня есть сервер node.js Connect, который проверяет куки-файлы запроса. Чтобы проверить это внутри узла, мне нужен способ написать запрос клиента и прикрепить к нему cookie. Я понимаю, что в HTTP-запросах для этого есть заголовок «cookie», но я не уверен, как его установить и отправить - мне также нужно отправить данные POST в том же запросе, поэтому в настоящее время я использую модуль рестлинга danwrong, но, похоже, он не позволяет мне добавить этот заголовок.

Есть ли какие-либо предложения о том, как сделать запрос к серверу с использованием жестко запрограммированных файлов cookie и данных POST?

Ответы [ 3 ]

51 голосов
/ 03 января 2011

Этот ответ устарел, см. Ответ @ ankitjaininfo ниже для более современного решения


Вот как я думаю, вы делаете запрос POST с данными и cookie, используя толькобиблиотека http узла.В этом примере публикуется JSON, соответственно задайте тип контента и длину контента, если вы публикуете разные данные.

// 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, должно действительно зависеть от того, что вы получили с сервера,Википедия достаточно хороша для написания этого материала: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes

36 голосов
/ 14 апреля 2014

Использование 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();
2 голосов
/ 18 июля 2013

Это можно сделать с помощью Requestify , очень простого и интересного HTTP-клиента, который я написал для nodeJS, он поддерживает простое использование файлов cookie и поддерживает кэширование.с прикрепленным файлом cookie просто сделайте следующее:

var requestify = require('requestify');
requestify.post('http://google.com', {}, {
    cookies: {
        sessionCookie: 'session-cookie-data'   
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...