मैं HttpURLConnection को प्रॉक्सी का उपयोग कैसे करूँ?


136

अगर मैं ऐसा करता हूं ...

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

यह प्रिंट करता है

Proxy? false

समस्या यह है, मैं एक प्रॉक्सी के पीछे हूँ। जेवीएम को विंडोज पर अपनी प्रॉक्सी जानकारी कहां से मिलती है? मैं इसे कैसे सेट करूँ? मेरे सभी अन्य ऐप मेरे प्रॉक्सी से पूरी तरह से खुश हैं।

जवाबों:


336

जावा 1.5 के बाद से आप एक java.net भी पास कर सकते हैं । openConnection(proxy)विधि का उदाहरण :

//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);

यदि आपके प्रॉक्सी को प्रमाणीकरण की आवश्यकता है तो यह आपको प्रतिक्रिया 407 देगा।

इस मामले में आपको निम्नलिखित कोड की आवश्यकता होगी:

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);

7
क्या हम इसके जरिए प्रॉक्सी यूजरनेम और प्रॉक्सी पासवर्ड दे सकते हैं।
एक्सक्लूसिव करें

15
क्या होगा यदि आपके पास अलग-अलग प्रॉक्सी के लिए अलग-अलग उपयोगकर्ता नाम / पासवर्ड जोड़े हैं? डिफ़ॉल्ट प्रमाणीकरण सेट करने के लिए एक स्थिर विधि को कॉल करना आदर्श नहीं है, यह sys गुण विधि को सेट करने से बेहतर नहीं है ..
javaPhobic

2
Authenticator.default एक स्थिर (वैश्विक) वैरिएबल है, इसलिए यह केवल एक बार है। लेकिन कृपया ध्यान दें कि उपरोक्त प्रमाणक केवल एक न्यूनतम उदाहरण है। यह एक समय में केवल एक पासवर्ड को संभाल सकता है। उदाहरणों के लिए Google, जो विभिन्न पासवर्डों के साथ कई होस्ट्स को संभाल सकता है।
स्ट्रोबोस्कोप

3
8u11 के बाद से यह मूलभूत प्रमाणीकरण के साथ डिफ़ॉल्ट रूप से काम नहीं करेगा, oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html jdk.http.auth.tunneling.disSchemes सिस्टम प्रॉपर्टी को खाली करने के लिए सेट किया जाना चाहिए
श्वेत

3
मामले में आपके पास डोमेन है। निम्नानुसार करें:new PasswordAuthentication("domainName\\user", "password".toCharArray());
डेवलपर Marius 15il followingnas

34

इंटरनेट से जवाब देना काफी आसान है। सिस्टम गुण सेट करें http.proxyHostऔर http.proxyPort। आप इसे वाक्य रचना के System.setProperty()साथ या कमांड लाइन से कर सकते हैं -D


19

प्रॉक्सी दो सिस्टम गुणों के माध्यम से समर्थित हैं: http.proxyHost और http.proxyPort। उन्हें क्रमशः प्रॉक्सी सर्वर और पोर्ट पर सेट किया जाना चाहिए। निम्नलिखित मूल उदाहरण इसे दिखाता है:

String url = "http://www.google.com/",
       proxy = "proxy.mydomain.com",
       port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);

@ पास्कल क्या आपको पता है कि अपाचे की तुलना में नवीनतम जावा दृष्टिकोण का उपयोग करने के प्रमुख अंतर क्या हैं commons-httpclient? जैसा कि जावा सरल मामलों के लिए (सार्वजनिक HTTP सर्वर से एक फ़ाइल को पुनः प्राप्त करने के लिए) के रूप में Apache लाइब्रेरी का उपयोग करने का कोई कारण नहीं है, जैसा कि जावा प्रॉक्सीइंग और प्रमाणीकरण का समर्थन करता है (जैसा कि आपने यहां बताया गया है stackoverflow.com/questions/1626549/… )। आपकी क्या सिफारिश है?
dma_k

@dma_k मैं आपके साथ सहमत हूं, आपके द्वारा बताए गए साधारण उपयोग के मामलों के लिए जैसा कि मैंने बताया कि मैं किसी तीसरे पक्ष के पुस्तकालय का उपयोग नहीं करूंगा।
पास्कल थिवेंट

क्या आप जानते हैं कि नॉनप्रॉक्सीहोस्ट का समर्थन कैसे करें? मैं देखता हूं कि मेरा उपकरण इसका समर्थन करता है लेकिन यह नहीं जानता कि मेरे ऐप को कैसे संभालना है।
रिओमैयन

लेकिन चर systemPropertiesका उपयोग नहीं किया जाता है connection!
पारसकर

12

आप भी सेट कर सकते हैं

-Djava.net.useSystemProxies=true

विंडोज और लिनक्स पर यह सिस्टम सेटिंग्स का उपयोग करेगा ताकि आपको खुद को दोहराने की जरूरत न पड़े (DRY)

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies


6
यह केवल मैनुअल प्रॉक्सी सर्वर कॉन्फ़िगरेशन के साथ काम करता है। स्क्रिप्ट के माध्यम से कॉन्फ़िगर किए गए स्वचालित प्रॉक्सी कॉन्फ़िगरेशन और प्रॉक्सी, "यूज़सिस्टमप्रॉक्सिज़" के लिए प्रचारित नहीं किए गए हैं।
टायर

1
प्रॉक्सीहोस्ट और प्रॉक्सीपार्ट सेट करते समय यह मेरे लिए काम करता है। धन्यवाद!
18

इसी तरह, यह मेरी कंपनी प्रॉक्सी के पीछे से काम किया जब करने के लिए कॉल System.setPropertyके लिए https.proxyHostऔर https.proxyPortकिसी कारण से सरसों में कटौती नहीं कर रहे थे।
पावेल कोमारोव

10

खोलने से पहले निम्नलिखित सेट करें,

System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");

यदि प्रॉक्सी को प्रमाणीकरण की आवश्यकता है,

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

7
मुझे वास्तव में लगता है कि "http.proxyUser" और "http.proxyPassword" अब समर्थित नहीं हैं। अधिक जानकारी के लिए stackoverflow.com/questions/120797/… देखें ।
p3t0r

5

जावा 1.8 और उच्चतर के लिए आपको -Djdk.http.auth.tunneling.disabledSchemes=https के साथ काम करने वाले बेसिक ऑथराइजेशन के साथ सम्‍मिलित करना होगा।


1
इसके बारे में पृष्ठभूमि की जानकारी चर्चा की गई है stackoverflow.com/questions/41806422/…
U880D

2

स्वीकृत उत्तर काम करेगा ... यदि आप अपने प्रॉक्सी होस्ट और पोर्ट =) को जानते हैं। लेकिन अगर आप प्रॉक्सी होस्ट की तलाश कर रहे हैं और नीचे दिए गए चरणों को पोर्ट करना चाहिए

यदि ऑटो कॉन्फ़िगर प्रॉक्सी दिया गया है: तो

1> खुला IE (या किसी भी ब्राउज़र)

2> IE-> टूल्स-> इंटरनेट विकल्प-> कनेक्शन-> LAN सेटिंग्स-> के माध्यम से अपने ब्राउज़र से url पता प्राप्त करें और url में पता दें जैसे: http://autocache.abc.com/ और दर्ज करें, a फ़ाइल .pac प्रारूप के साथ डाउनलोड की जाएगी, डेस्कटॉप पर सहेजें

3> टेक्स्टपैड में .pac फ़ाइल खोलें, PROXY की पहचान करें:

आपके संपादक में, यह कुछ इस तरह आएगा:

वापसी "PROXY web-proxy.ind.abc.com:8080; PROXY छंद। sgp.abc.com:8080";

5 मिनट में काम करने के लिए मावेन से कुदोस

एक बार जब आपके पास होस्ट और पोर्ट होता है तो बस इसमें पॉप होता है और जाने के लिए आपका अच्छा होता है

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.