2011-11-01 25 views
75

के साथ बाहरी HTTP अनुरोध कैसे करें, यह प्रश्न काफी सरल है। मैं बैकएंड HTTP सर्वर (PUT, GET, और DELETE अनुरोधों) पर HTTP क्वेरी को लॉग, प्रमाणीकृत और अग्रेषित करने के लिए प्रॉक्सी के रूप में एक Node.js सर्वर का उपयोग करना चाहता हूं।Node.js

उस उद्देश्य के लिए मुझे किस लाइब्रेरी का उपयोग करना चाहिए? मुझे डर है कि मैं एक नहीं ढूंढ सकता।

उत्तर

121

NodeJS एक मानक मॉड्यूल के रूप में http.request समर्थन करता है: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http'); 

var options = { 
    host: 'example.com', 
    port: 80, 
    path: '/foo.html' 
}; 

http.get(options, function(resp){ 
    resp.on('data', function(chunk){ 
    //do something with chunk 
    }); 
}).on("error", function(e){ 
    console.log("Got error: " + e.message); 
}); 
+10

मैं utf8 तारों के रूप में डेटा प्राप्त करने के लिए 'resp.setEncoding ('utf8'); '(या जो भी एन्कोडिंग आप उपयोग कर रहे हैं) जोड़ने की अनुशंसा करता हूं। अगर मैं सही समझ गया हूं, अन्यथा आपको बफर ऑब्जेक्ट मिलेंगे और मल्टी-बाइट वर्णों के साथ परेशानी हो सकती है यदि बहु-बाइट चरित्र दो हिस्सों में विभाजित होता है। (बस थोड़ी देर के लिए एक संबंधित समस्या डीबग किया) – Touko

+7

मैंने वास्तव में 'अनुरोध' एनपीएम मॉड्यूल का उपयोग करना शुरू कर दिया है। – chovy

0

आप ऐसा करने के लिए node.js http मॉड्यूल का उपयोग कर सकते हैं। आप Node.js HTTP पर प्रलेखन की जांच कर सकते हैं।

आपको क्वेरी स्ट्रिंग के साथ-साथ अन्य HTTP सर्वर को पास करने की आवश्यकता होगी। आपके पास ServerRequest.url में होना चाहिए।

एक बार जब आप उन की जानकारी है, तो आप विकल्प है कि आप http.request()

7

में प्रदान करेगा मैं node-http-proxy और express गठबंधन होगा में बैकएंड HTTP सर्वर और बंदरगाहों पर दे सकते हैं।

नोड http-प्रॉक्सी RoutingProxy के माध्यम से अपने Node.js वेब सर्वर के अंदर एक प्रॉक्सी (उदाहरण कहा जाता एक और http सर्वर भीतर प्रॉक्सी अनुरोध देखें) का समर्थन करेंगे।

अपने कस्टम सर्वर तर्क के अंदर आप एक्सप्रेस का उपयोग करके प्रमाणीकरण कर सकते हैं। auth sample here for an example देखें।

उन दो उदाहरणों को जोड़ना आपको जो चाहिए वो देना चाहिए।

4

आप निर्मित http मॉड्यूल का उपयोग http.request() करने के लिए कर सकते हैं।

हालांकि आप एपीआई आप एक मॉड्यूल का उपयोग कर सकते हैं आसान बनाने के लिए चाहते हैं, तो इस तरह के रूप superagent

+3

बहुत saner एपीआई मदद करता है। मैं केवल निम्न स्तर की एपीआई प्रदान करने के लिए नोड को दोष नहीं देता लेकिन डेटा के हिस्सों को संभालने के लिए शुरू करना सिर्फ सादा कष्टप्रद है। –

1

नोड http-प्रॉक्सी के लिए एक महान समाधान है, जैसा कि ऊपर @hross द्वारा सुझाव दिया गया था। यदि आप नोड का उपयोग करने पर डेडसेट नहीं हैं, तो हम एक ही काम करने के लिए NGINX का उपयोग करते हैं। यह नोड के साथ वास्तव में अच्छी तरह से काम करता है। हम इसका उपयोग उदाहरण के लिए एसएसएल अनुरोधों को नोड करने के लिए अग्रेषित करने से पहले संसाधित करने के लिए करते हैं। यह कैशिंग और अग्रेषण मार्गों को भी संभाल सकता है। वाह!

7

मैं हाल ही में REQUESTIFY की खोज की।

प्राप्त अनुरोध:

requestify.get('http://example.com').then(function(response) { 
    // Get the response body 
    response.getBody(); 
}); 

पोस्ट Json करने के लिए:

requestify.post('http://example.com', { 
     hello: 'world' 
    }) 
     .then(function(response) { 
      // Get the response body (JSON parsed or jQuery object for XMLs) 
      response.getBody(); 

      // Get the raw response body 
      response.body; 
     }); 

आशा यह वास्तव में