2011-09-06 17 views
52

मैं नोड में एक पेज खोलना चाहता हूं और अपने आवेदन में सामग्री को संसाधित करना चाहता हूं।आप Node.js में HTTP रीडायरेक्ट का पालन कैसे करते हैं?

var opts = {host: host, path:pathname, port: 80}; 
http.get(opts, function(res) { 
    var page = ''; 
    res.on('data', function (chunk) { 
    page += chunk; 
    }); 
    res.on('end', function() { 
    // process page 
    }); 

यह काम नहीं करता है, तथापि, पेज एक 301/302 रीडायरेक्ट वापस लौट आता है: कुछ इस तरह अच्छी तरह से काम करने लगता है। एकाधिक रीडायरेक्ट होने पर मैं इसे पुन: प्रयोज्य तरीके से कैसे करूं? क्या http के शीर्ष पर एक रैपर मॉड्यूल है जो किसी नोड एप्लिकेशन से http प्रतिक्रियाओं को आसानी से संभालता है?

उत्तर

36

क्या http के शीर्ष पर एक रैपर मॉड्यूल है जो किसी नोड एप्लिकेशन से http प्रतिक्रियाओं को आसानी से संभालता है?

request

Redirection logic in request

+9

निर्मित http मॉड्यूल ?! – aaaidan

+1

यह है। इसे 'http.request' कहा जाता है एपीआई बहुत आसान है। – Raynos

+3

क्या किसी भी तरह से प्रत्येक रीडायरेक्ट के लिए कॉलबैक होना संभव है? मैं अनुरोध के माध्यम से हर एक यूआरएल स्टोर करना चाहता हूं। इसे दस्तावेज़ों में नहीं मिला। – Ignas

67

तो है सब आप क्या करना चाहते रिडायरेक्ट का अनुवर्तन लेकिन अभी भी निर्मित HTTP और HTTPS मॉड्यूल का उपयोग करना चाहते, मैं तुम्हें https://github.com/olalonde/follow-redirects का उपयोग सुझाव देते हैं।

तुम सब करने की ज़रूरत है की जगह है:

var http = require('http'); 

var http = require('follow-redirects').http; 

द्वारा ... और अपने सभी अनुरोधों को स्वचालित रूप से रीडायरेक्ट का पालन करेंगे।

प्रकटीकरण: मैंने इस मॉड्यूल को लिखा था।

+2

एक आकर्षण के रूप में काम किया, जैसा कि उल्लेख किया गया ड्रॉप के रूप में सरल था। – viion

+0

यह अब यहां है: https: // github।कॉम/अनुरोध/अनुरोध/ब्लॉब/d18cb487cf4e02740778d4bb464b5a1c7441d800/lib/redirect.js # L46 –

+1

क्या यह HTTPS के साथ काम करता है? –

18

अद्यतन:

अब आप सभी var request = require('request');followAllRedirects परम उपयोग करने के साथ पुनर्निर्देश पालन कर सकते हैं।

request({ 
    followAllRedirects: true, 
    url: url 
}, function (error, response, body) { 
    if (!error) { 
    console.log(response); 
    } 
}); 
+0

यह पूरा कोड है? आपका var 'http' है लेकिन फिर आप 'request' – jcollum

+5

नामक फ़ंक्शन का उपयोग करते हैं, जिसे आपको बस (' अनुरोध ') की आवश्यकता नहीं है, यह एक बाहरी मॉड्यूल है और इसे डाउनलोड और स्थापित करने की आवश्यकता है - https: //www.npmjs। कॉम/पैकेज/अनुरोध (एनपीएम इंस्टॉल अनुरोध) –

1

आप https सर्वर है, तो https:// प्रोटोकॉल का उपयोग करने के लिए अपने यूआरएल बदल जाते हैं।

मुझे इस के साथ इसी तरह के मुद्दे में मिला। मेरे यूआरएल में http:// प्रोटोकॉल है और मैं POST अनुरोध करना चाहता हूं, लेकिन सर्वर इसे https पर रीडायरेक्ट करना चाहता है। क्या होता है कि, नोड http व्यवहार हो जाता है GET विधि में रीडायरेक्ट अनुरोध (अगली) भेजता है जो मामला नहीं है।

मैंने अपना यूआरएल https:// प्रोटोकॉल में बदलने के लिए किया है और यह काम करता है।

1

एक और अनुरोध response.headers.location के आधार पर बनाओ: क्यों रहने वाले b'jesus के इस भाग नहीं है

 const request = function(url) { 
     lib.get(url, (response) => { 
      var body = []; 
      if (response.statusCode == 302) { 
      body = []; 
      request(response.headers.location); 
      } else { 
      response.on("data", /*...*/); 
      response.on("end", /*...*/); 
      }; 
     }).on("error", /*...*/); 
     }; 
     request(url); 
+0

मैं एक जेएस प्रोग्रामर नहीं हूं इसलिए यदि आप बताते हैं कि डाउनवोट क्यों समझा जाए तो यह उपयोगी होगा। – Nakilon

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