2011-01-02 16 views
36

मुझे एक node.js मिला है सर्वर से अनुरोध करें जो अनुरोध की कुकीज़ जांचता है। नोड के भीतर इसका परीक्षण करने के लिए, मुझे क्लाइंट अनुरोध लिखने और इसमें एक कुकी संलग्न करने का एक तरीका चाहिए। मैं समझता हूं कि HTTP अनुरोधों के लिए 'कुकी' हेडर है, लेकिन मुझे यकीन नहीं है कि इसे कैसे सेट करें और भेजें - मुझे उसी अनुरोध में POST डेटा भेजने की भी आवश्यकता है, इसलिए मैं वर्तमान में डैनरॉन्ग के रेस्टलर मॉड्यूल का उपयोग कर रहा हूं, लेकिन ऐसा लगता है कि मुझे वह हेडर जोड़ने की अनुमति नहीं है।मैं कुकी के साथ HTTP क्लाइंट अनुरोध कैसे बना सकता हूं?

कोई सुझाव है कि मैं हार्ड-कोडित कुकी और पोस्ट डेटा दोनों के साथ सर्वर से अनुरोध कैसे कर सकता हूं?

उत्तर

47

यहां बताया गया है कि मुझे लगता है कि आप नोड http लाइब्रेरी का उपयोग करके डेटा और कुकी के साथ एक POST अनुरोध करते हैं। यह उदाहरण 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

+0

मैं JSON डेटा ही भेज रहे होंगे, तो यह ठीक है, लेकिन अन्य परीक्षणों के साथ एकरूपता के लिए, मुझे उम्मीद थी यह करने के लिए एक तरह से restler पुस्तकालय – Vanwaril

+1

मैं देख रहा हूँ का उपयोग कर वहाँ था, यह नहीं था अपने प्रश्न से स्पष्ट है कि रेस्टलर महत्वपूर्ण था, क्षमा करें। Https://github.com/danwrong/restler पर README का कहना है कि पोस्ट विधि विकल्प तर्क में शीर्षलेख निर्दिष्ट कर सकती है। आपको बस कुकी को इसके बजाय वहां रखना होगा: 'rest.post (url, {data: 'your data', हेडर {कुकी: 'आपकी कुकी'}}) ' – RandomEtc

+0

ओह, मैंने लोअरकेस' कुकी 'की कोशिश की। वैसे भी, मैं इसे पहले से ही http क्लाइंट का उपयोग करने के लिए पुनः लिखता हूं, इसलिए मैं इसे बाद में परिवर्तित करने के बारे में सोचूंगा। – Vanwaril

1

आपको लगता है कि Requestify, एक बहुत ही सरल और शांत HTTP ग्राहक मैं NodeJS के लिए लिखा था का उपयोग कर, यह कुकीज़ के आसान उपयोग का समर्थन करते हैं और यह भी कैशिंग का समर्थन करता है सकते हैं।

एक कुकी सिर्फ निम्न उपाय अपनाते हैं संलग्न के साथ एक अनुरोध करने के लिए:

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

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(); 
+1

यह 2014 में स्वीकार्य उत्तर होना चाहिए। – Lewis

+0

धन्यवाद एक लाख @ankitjaininfo। मैं HTTP नोड दस्तावेज़ों का पालन करने का प्रयास करने में फंस गया था: "सेट-कुकी और कुकी हेडर जो मानों की सरणी के रूप में दर्शाए जाते हैं" [link] (https://nodejs.org/api/http.html#http_http) – Bludwarf

संबंधित मुद्दे