Как создать HTTP-запрос клиента с файлом cookie?
У меня есть сервер node.js Connect, который проверяет файлы cookie запроса. Чтобы проверить его в node, мне нужен способ написать запрос клиента и приложить к нему файл cookie. Я понимаю, что для HTTP-запросов для этого есть заголовок "cookie", но я не уверен, как его установить и отправить. Мне также нужно отправить данные POST в один и тот же запрос, поэтому в настоящее время я использую danwrong restler module, но это, похоже, не позволяет мне добавить этот заголовок.
Любые предложения о том, как я могу сделать запрос на сервер с жестко закодированными файлами cookie и POST?
Ответы
Ответ 1
Этот ответ является устаревшим, пожалуйста, см @ankitjaininfo ответ ниже для более современного решения
Здесь, как я думаю, вы делаете запрос POST с данными и cookie, используя только узловую http-библиотеку. В этом примере вы отправляете JSON, соответственно настраиваете свой контент и длину контента, отправляя разные данные.
// NB:- node 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
Ответ 2
Использование 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();
Ответ 3
Вы можете сделать это, используя Requestify, очень простой и классный HTTP-клиент, который я написал для nodeJS, он поддерживает простое использование файлов cookie и он также поддерживает кеширование.
Чтобы выполнить запрос с прикрепленным файлом cookie, выполните следующие действия:
var requestify = require('requestify');
requestify.post('http://google.com', {}, {
cookies: {
sessionCookie: 'session-cookie-data'
}
});