2011-09-20 14 views
29

मैं जावा के लिए नौसिखिया हूं और मेरा पहला काम कुछ 10,000 यूआरएल पार्स करना और कुछ जानकारी निकालना है, इसके लिए मैं जसौप और इसके कामकाजी जुर्माना का उपयोग कर रहा हूं। लेकिन अब मैं इसे प्रॉक्सी समर्थन जोड़ना चाहता हूं। प्रॉक्सी के पास उपयोगकर्ता नाम और पासवर्ड भी है। क्या कोई 1 इस के साथ मेरी मदद कर सकता है। धन्यवादJsoup (HTML पार्सर) को प्रॉक्सी समर्थन कैसे जोड़ें?

+0

हम्म, आप के बजाय HtmlUnit उपयोग करने की कोशिश की है? यह कार्य – raven

+0

पर होना चाहिए http://stackoverflow.com/questions/120797/how-do-i-set-the-proxy-to-be-used-by-the-jvm – swanliu

+0

याहू मैंने उपयोग किया है लेकिन मैं अभी भी लगता है कि jsoup मेरी आवश्यकता के लिए बेहतर काम करता है। मैं उलझन में हूं कि jsoup का उपयोग कर प्रॉक्सी के साथ कुशलता से काम कैसे करें। – Himanshu

उत्तर

25

आपको Jsoup के माध्यम से वेबपृष्ठ डेटा प्राप्त करने की आवश्यकता नहीं है। यहां मेरा समाधान है, हालांकि यह सबसे अच्छा नहीं हो सकता है।

URL url = new URL("http://www.example.com/"); 
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); // or whatever your proxy is 
    HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy); 

    uc.connect(); 

    String line = null; 
    StringBuffer tmp = new StringBuffer(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
    while ((line = in.readLine()) != null) { 
     tmp.append(line); 
    } 

    Document doc = Jsoup.parse(String.valueOf(tmp)); 

और वहां यह है। यह प्रॉक्सी के माध्यम से एचटीएमएल पेज का स्रोत प्राप्त करता है और फिर इसे Jsoup के साथ पार्स करता है।

+0

अच्छा समाधान। क्या कोई तरीका है कि मैं एनआईओ आधारित फेक्चरिंग एफ़्टर uc.connect का उपयोग कर सकता हूं? – danielad

+0

आकस्मिक पाठक के लिए, Jsoup को HttpURLConnection के इनपुटस्ट्रीम को सीधे पास करना संभव है। विवरण के लिए निम्नलिखित उत्तर देखें: http://stackoverflow.com/a/42085445/363573 – Stephan

+0

यह Jsoup केवल समाधान भी देखें: http://stackoverflow.com/a/34943161/363573 – Stephan

63

आप आसानी से प्रॉक्सी

System.setProperty("http.proxyHost", "192.168.5.1"); 
System.setProperty("http.proxyPort", "1080"); 
Document doc = Jsoup.connect("www.google.com").get(); 
+0

धन्यवाद! बहुत आसान। – vikingsteve

+0

और कॉल के बाद शून्य पर सेट करना न भूलें अन्यथा अन्य कॉल जिन्हें इसकी आवश्यकता नहीं है, बहुत धीमी हो जाएगी – Dejell

+0

आसान, त्वरित और काम कर रहा है। यह जवाब स्वीकार किया जाना चाहिए। – Gondy

13

सेट कर सकते हैं और यदि आप HTTPS मेरे जैसे के बाद कर रहे हैं, कोशिश करने के लिए याद

System.setProperty("https.proxyHost", "192.168.5.1"); 
System.setProperty("https.proxyPort", "1080"); 
Document doc = Jsoup.connect("www.google.com").get(); 
+0

यह गैर सिस्टम विस्तृत समाधान भी देखें: http://stackoverflow.com/a/34943161/363573 – Stephan

3
System.setProperty("http.proxyHost", "192.168.5.1"); 
System.setProperty("http.proxyPort", "1080"); 
Document doc = Jsoup.connect("www.google.com").get(); 

यह वह जगह है गलत समाधान है, क्योंकि आम तौर पर पार्स बहु-क्रम है और हम आमतौर पर प्रॉक्सी बदलने की जरूरत है। यह कोड सभी धागे के लिए केवल एक प्रॉक्सी सेट करता है। Jsoup.Connection का उपयोग करने के लिए इतना बेहतर है।

+0

इस मामले में जेएसओपी के लिए यूआरएल कनेक्शन खोलें और इसे पार्सिंग के लिए यूआरएल इनपुटस्ट्रीम दें। @ रयान का समाधान इसका वर्णन करता है: http://stackoverflow.com/a/8445790/363573 – Stephan

3

आप Jsoup 1.9.1 से पहले कार्यक्रम

final String authUser = "USERNAME"; 
final String authPassword = "PASSWORD"; 



Authenticator.setDefault(
       new Authenticator() { 
        public PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(
          authUser, authPassword.toCharArray()); 
        } 
       } 
      ); 

.. 

System.setProperty("http.proxyHost", "192.168.5.1"); 
System.setProperty("http.proxyPort", "1080"); 
.. 
17

चलाने से पहले इस जोड़ने के लिए पसंद कर सकते हैं: लिखने के लिए कम कोड (:

// Setup proxy 
Proxy proxy = new Proxy(          // 
     Proxy.Type.HTTP,          // 
     InetSocketAddress.createUnresolved("127.0.0.1", 8080) // 
); 

// Fetch url with proxy 
Document doc = Jsoup // 
       .connect("http://www.example.com/") // 
       .proxy(proxy) // 
       .userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2") // 
       .header("Content-Language", "en-US") // 
       .get(); 

Jsoup 1.9.1 और बाद के संस्करण)

// Fetch url with proxy 
Document doc = Jsoup // 
       .connect("http://www.example.com/") // 
       .proxy("127.0.0.1", 8080) // sets a HTTP proxy 
       .userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2") // 
       .header("Content-Language", "en-US") // 
       .get(); 

संदर्भ:

0

बजाय इस कोड का प्रयास करें:

प्रॉक्सी
URL url = new URL("http://www.example.com/"); 
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); // or whatever your proxy is 

HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy); 
hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); 
uc.setRequestProperty("Content-Language", "en-US"); 
uc.setRequestMethod("GET"); 
uc.connect(); 

Document doc = Jsoup.parse(uc.getInputStream()); 
2

Jsoup समर्थन का उपयोग करता है, v1.9.1 के बाद से।

  • proxy(Proxy p)
  • proxy(String host, int port)

जो तुम इस तरह इसका इस्तेमाल कर सकते हैं::

Jsoup.connect("...url...").proxy("127.0.0.1", 8080); 

आप प्रमाणीकरण की जरूरत है, तो आप Authenticator दृष्टिकोण का उल्लेख उपयोग कर सकते हैं Connection class निम्न विधियों है @Navneet Swaminathan द्वारा या बस system properties सेट करें:

System.setProperty("http.proxyUser", "username"); 
System.setProperty("http.proxyPassword", "password"); 

या

System.setProperty("https.proxyUser", "username"); 
System.setProperty("https.proxyPassword", "password"); 
संबंधित मुद्दे