2011-01-02 32 views
36

İsteğin çerezlerini kontrol eden bir node.js Connect sunucusuna sahibim. Düğüm içinde test etmek için, bir müşteri isteği yazıp ona bir çerez ekleyeceğim bir yönteme ihtiyacım var. HTTP İsteklerinin bunun için 'çerez' başlığına sahip olduğunu biliyorum, ancak nasıl ayarlayacağımı ve göndereceğimi bilmiyorum - aynı isteğiyle POST verilerini de göndermem gerekiyor, bu yüzden şu anda danwrong'un restler modülünü kullanıyorum. ama bu başlığı eklememe izin vermiyor gibi görünüyor.Bir çerezle birlikte bir HTTP İstemci İsteği nasıl oluşturabilirim?

Hem kodlanmış bir tanımlama bilgisi hem de POST verileriyle sunucuya nasıl istekte bulunabileceğimize dair herhangi bir öneriniz var mı?

cevap

47

Veritabanında bir POST isteğini ve yalnızca düğüm http kitaplığını kullanarak bir tanımlama bilgisi hazırladığınızı düşünüyorum. Bu örnek JSON gönderiyor, farklı veri gönderirseniz içerik türünüzü ve içerik uzunluğunuzu buna göre ayarlayın.

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

Eğer Cookie değeri göndermek Ne gerçekten sunucusundan alınan ne bağlı olmalıdır. Bu eşyaların Wikipedia'nın yazma-up oldukça iyidir: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes

+0

JSON verilerini kendisi gönderecekseniz, bu nedenle bu iyi, ama diğer testler ile bütünlüğü için, gördüğüm restler kütüphanesini – Vanwaril

+1

kullanarak bunu yapmanın bir yolu olduğunu umuyordum

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(); 
değildi Sorgunun önemli olduğunu düşündüğünüzden emin olun, üzgünüm. Https://github.com/danwrong/restler adresindeki README, gönderi yönteminin seçenekler argümanında üstbilgileri belirleyebileceğini söylüyor. Bunun yerine Çerezi yerine koymanız gerekiyor: 'rest.post (url, {data: 'verileriniz', başlıklar {Cookie: 'çereziniz'}}) – RandomEtc

+0

Oh, küçük harfli 'çerez' denedim. Her neyse, zaten http istemcisini kullanmak için yeniden yazdım, bu yüzden daha sonra geri dönüştürmeyi düşüneceğim. – Vanwaril

1

Sen Requestify, ben nodeJS için yazdığı çok basit ve serin bir HTTP istemcisi kullanarak, çerezlerin kolay kullanımını destekleyen bunu yapabilir ve aynı zamanda önbelleğe alma destekler.

sadece aşağıdakileri yapın bağlı bir çerez ile bir istek gerçekleştirmek için:

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

http.createClient kullanımı artık önerilmemektedir. Üstbilgileri aşağıdaki gibi seçenekler koleksiyonuna aktarabilirsiniz.

, bu
+1

Bu kabul edilen cevap 2014 yılında olmalıdır. – Lewis

+0

Bir milyon @ankitjaininfo teşekkürler. HTTP Node belgelerinin ne olduğunu takip etmeye çalışırken sıkışmıştım: "değer dizisi olarak gösterilen set-çerez ve çerez başlıkları" [link] (https://nodejs.org/api/http.html#http_http) – Bludwarf

İlgili konular