jsoup में HTTP प्रॉक्सी के ज़रिए पेज लाना
jsoup के अनुरोध-स्तरीय HTTP प्रॉक्सी API का उपयोग करें और जब कई वर्कर सेशन सेटिंग्स साझा करते हों तो अलग अनुरोध बनाएं।
jsoup HTTP प्रॉक्सी के ज़रिए पेज ला सकता है और उसी कॉल में प्रतिक्रिया का विश्लेषण कर सकता है:
Document page = Jsoup.connect("https://www.example.com/")
.proxy("proxy.example", 8080)
.get();
होस्टनाम और पूर्णांक पोर्ट प्रॉक्सी की पहचान करते हैं। अनुमत सार्वजनिक पेजों के अनुरोधों के लिए अपनी सेवा या HTTP प्रॉक्सी सूची से कोई HTTP एंडपॉइंट चुनें। connect को दिया गया URL वही पेज रहता है जो आप चाहते हैं। सिर्फ़ यह रास्ता जोड़ने के लिए HTML को अलग URLConnection से स्ट्रिंग में डाउनलोड करने की ज़रूरत नहीं है।
proxy(String, int) उस अनुरोध के लिए HTTP प्रॉक्सी चुनता है। 1080 जैसा पोर्ट नंबर उसके प्रोटोकॉल को SOCKS में नहीं बदलता; प्रॉक्सी एंडपॉइंट को वही प्रकार बोलना चाहिए जो कॉन्फ़िगर किया जा रहा है। jsoup java.net.Proxy स्वीकार करने वाला एक ओवरलोड भी देता है, लेकिन किसी विशेष रास्ते का समर्थन अब भी उपयोग किए जा रहे HTTP कार्यान्वयन पर निर्भर है।
हर वर्कर को अपना अनुरोध दें
अनुरोध-स्तरीय विकल्प हर डाउनलोड के आसपास JVM सिस्टम प्रॉपर्टी बदलने से समानांतर काम को आसान बनाता है। बदलने योग्य अनुरोध हर वर्कर के लिए अलग रखें। आधुनिक jsoup नया अनुरोध बनाते समय सेशन की सेटिंग्स और कुकी स्टोर साझा कर सकता है:
Connection session = Jsoup.newSession();
Document first = session.newRequest()
.url("https://www.example.com/one")
.proxy("proxy-a.example", 8080)
.get();
Document second = session.newRequest()
.url("https://www.example.com/two")
.proxy("proxy-b.example", 8080)
.get();
ऊपर के कॉल स्पष्टता के लिए क्रमागत चलते हैं। अगर काम एक साथ बाँटा जाता है, तो चल रहे एक Connection पर प्रॉक्सी बदलने के बजाय अनुरोध स्वतंत्र रूप से बनाएं। साझा सेशन कुकीज़ भी साझा करता है; जब ब्राउज़िंग पहचान अलग रहनी चाहिए तब अलग सेशन उपयोग करें।
ये इंटरफ़ेस jsoup 1.21.2 में मौजूद हैं। बिना आर्ग्युमेंट वाला newRequest() इंटरफ़ेस 1.14.1 से है, इसलिए पुराने ऐप्लिकेशन को सेशन वाला उदाहरण अपनाने से पहले अपनी निर्भरता जाँचनी चाहिए।
प्रमाण-पत्र प्रमाणित प्रॉक्सी के लिए एक अतिरिक्त आवश्यकता है। सफल रास्ता चुनाव खाता प्रदान नहीं करता, और प्रॉक्सी चुनौती प्राप्त करना उसके पोर्ट से कनेक्ट न हो पाने से अलग है।