2011-03-02 13 views
22

द्वारा प्रॉक्सी का उपयोग करने के लिए httpClient को कैसे बल देना है I http.proxyHost और http.proxyPort को httpClient पर कोई उपयोग नहीं है। पर्यावरण चर या वीएम तर्कों या कोड बदलने के बिना कुछ प्रॉक्सी का उपयोग करने के लिए httpClient को कैसे बल दें?कोड बदलने के बिना, पर्यावरण चर या JVM तर्क

+0

आप इस प्रश्न के लिए एक समाधान मिल गया है? मुझे एक ही समस्या का सामना करना पड़ रहा है, एक थर्ड पार्टी लाइब्रेरी (एज़ूर-कीवॉल्ट-जावा-एसडीके) अपने स्वयं के httpClient का उपयोग करती है और मैं प्रॉक्सी का उपयोग करने के लिए इसे मजबूर करने में असमर्थ हूं। वास्तविक http कॉल नए निष्पादक धागे में किए जाते हैं जो मुझे कॉलिंग थ्रेड में प्रॉक्सी चयनकर्ता सेट करने की अनुमति नहीं देते हैं। कोई समाधान? –

उत्तर

-10

क्या इससे मदद मिलती है?

System.setProperty("https.proxyHost", proxy_host); 
System.setProperty("http.proxyHost", proxy_host); 
System.setProperty("https.proxyPort", proxy_port); 
System.setProperty("http.proxyPort", proxy_port); 

या बिल्कुल आप कमांडलाइन

+1

दुर्भाग्य से यह httpclient के लिए काम नहीं करता है, यह मेरा प्रश्न है – user496949

+1

प्रश्न स्पष्ट रूप से बताता है कि वे चर काम नहीं कर रहे थे। –

5

आप client.getHostConfiguration().setProxy(host, port) विधि के साथ अपने आप को द्वारा HttpClient करने के लिए प्रॉक्सी मजबूर कर सकते हैं के माध्यम से एक ही गुण पारित कर सकते हैं। मैं आम तौर पर HttpClient के आसपास रैपर वर्ग बनाते हैं और इस कक्षा को प्रारंभ करते समय मैं जो भी स्रोत (env। चर ...) से प्रॉक्सी सेट करता हूं।

मैंने स्थिति में java.net.ProxySelector.setDefault(new MyProxySelector()) का उपयोग किया जहां आप सीधे HttpClient पर प्रॉक्सी सेट नहीं कर सकते। आपको अपनी खुद की प्रॉक्सी चयनकर्ता वर्ग को कार्यान्वित करना होगा और विधि का चयन अनुरोधित यूआरआई के आधार पर प्रॉक्सी चयन करता है। आप यूआरएल-> प्रॉक्सी मैपिंग को विशेष यूआरआई पते को आवश्यक प्रॉक्सी में कॉन्फ़िगर करने या वैश्विक स्तर पर सभी अनुरोधित यूआरआई के लिए एक प्रॉक्सी वापस करने के लिए कर सकते हैं।

जैसा कि मैं HttpClient स्रोत कोड में देख सकता हूं, प्रॉक्सी केवल setProxy विधि को कॉन्फ़िगर करने का कोई अन्य तरीका नहीं है। मैं कॉमन्स-httpclient-3.1 का उपयोग कर रहा हूँ।

+1

समस्या यह है कि कभी-कभी मैं कोड को संशोधित नहीं कर सकता। – user496949

+0

@ user496949 क्या आप 'एचटीपी क्लाइंट' के आसपास रैपर क्लास बना सकते हैं और इसे हमेशा अपने तरीके से शुरू कर सकते हैं? –

+0

कहता है, मेरे पास एक तृतीय पक्ष लाइब्रेरी है, यह कुछ प्राप्त करने के लिए httpclient का उपयोग करती है। इस स्थिति के साथ कैसे डेल करें? – user496949

18
+3

जैसा कि @wangf नीचे उल्लेखित है, आप '.prild()' को किसी भी HttpClientBuilder पर 'http.proxyHost' और 'http.proxyPort' जैसे सिस्टम गुणों को पढ़ने के लिए' .build() 'को कॉल करने से पहले' .useSystemProperties() 'का उपयोग कर सकते हैं: http: // hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html#useSystemProperties() – bodecker

0

AFAIK, आप कोड में परिवर्तन के बिना इस प्रबंधन नहीं कर सकते देखते हैं लेकिन आप अपने खुद के कनेक्शन प्रबंधक का उपयोग करके देशी व्यवहार के करीब हो सकता है। ProxySelector changes URL's scheme from https:// to socket://

5

HTTP ग्राहक (v 4.5.1 मेरे मामले के लिए) इस तरह सिस्टम प्रॉक्सी उपयोग कर सकते हैं:

HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build(); 
//or 
HttpClient httpClient = HttpClients.createSystem(); 
+0

बिल्कुल, आप इस तरह के सिस्टम गुणों का उपयोग कर सकते हैं। यह न भूलें कि https: // ... urls के कनेक्शन के लिए आपको https.proxyHost आदि गुणों का उपयोग करना होगा। मेरे पक्ष से विवरण के साथ एक समान समस्या: http://stackoverflow.com/questions/30630330/what-java-properties-to-pass-to-a-java-app-to-authenticate-with-a-http -proxy / –

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