2012-03-21 18 views
18

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

 httpclient.getHostConfiguration().setProxy("67.177.104.230", 58720); 

मुझे लगता है कि कोड के साथ त्रुटियों मिल:

21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect 
21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: Retrying request 
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect 
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: Retrying request 
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect 
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 
INFO: Retrying request 
org.apache.commons.httpclient.ProtocolException: The server xxxxx failed to respond with a valid HTTP response 
    at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1846) 
    at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) 
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995) 
    at org.apache.commons.httpclient.ConnectMethod.execute(ConnectMethod.java:144) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeConnect(HttpMethodDirector.java:495) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:390) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) 
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) 
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) 
    at test.main(test.java:42) 

जब मैं उस लाइन को हटाने, सब कुछ उम्मीद के रूप में ठीक चलाता

मैं का उपयोग करने की कोशिश की।

+1

यह वास्तव में संभव है। आपके अपवाद में, कौन सा मेजबान 'xxxxx' redacted है? आपका प्रॉक्सी या गंतव्य? आपके पास इतने सारे कनेक्शन क्यों नकार दिए गए हैं? क्या आपका प्रॉक्सी वास्तव में ठीक से काम कर रहा है? –

+2

आपने एक HTTP प्रॉक्सी कॉन्फ़िगर किया है, न कि सॉक्स प्रॉक्सी। सॉक्स को HttpClient 3 द्वारा समर्थित नहीं है। आप सिस्टम गुणों के मोजेप्रोक्सीहोस्ट 'और' मोजेप्रोक्सीपोर्ट 'का उपयोग करने में सक्षम हो सकते हैं। या HttpComponents HttpClient 4 सॉक्स प्रॉक्सी का समर्थन कर सकता है। –

उत्तर

31

httpclient 4.1.x के लिए आप इस तरह प्रॉक्सी (this example से लिया गया) सेट कर सकते हैं:

HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 

    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    try { 
     httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

     HttpHost target = new HttpHost("issues.apache.org", 443, "https"); 
     HttpGet req = new HttpGet("/"); 

     System.out.println("executing request to " + target + " via " + proxy); 
     HttpResponse rsp = httpclient.execute(target, req); 
     ... 
    } finally { 
     // When HttpClient instance is no longer needed, 
     // shut down the connection manager to ensure 
     // immediate deallocation of all system resources 
     httpclient.getConnectionManager().shutdown(); 
    } 
+0

मैं नए HTTP घटकों का उपयोग नहीं करता, मैं कॉमन्स httpclient का उपयोग कर रहा हूं। शायद मुझे स्थानांतरित करना चाहिए ... – dario111cro

+0

मैं पार्टी के लिए थोड़ा देर हो चुकी हूं, लेकिन यह मेरी आंतरिक विकास सेटिंग्स के लिए आकर्षण की तरह काम करता है। बहुत धन्यवाद और एक उत्थान है। – Jas

+0

यह मोजे 4/5 प्रॉक्सी – tribbloid

0

मैं HTTP क्लाइंट संस्करण के साथ एक समान समस्या 4. मैं सर्वर क्योंकि से कनेक्ट नहीं कर सकता था सॉक्स प्रॉक्सी त्रुटि का और मैंने इसे नीचे कॉन्फ़िगरेशन का उपयोग करके तय किया:

client.getParams()। सेट पैरामीटर ("मोजेप्रोक्सीहोस्ट", प्रॉक्सीहोस्ट); ग्राहक .getParams()। सेट पैरामीटर ("मोजेप्रोक्सीपोर्ट", प्रॉक्सीपोर्ट);

5

अपाचे HTTPComponents से शुरू 4.3.x HttpClientBuilder क्लास सिस्टम गुणों से प्रॉक्सी डिफ़ॉल्ट सेट करता है http.proxyHost और http.proxyPort या अन्यथा आप setProxy विधि का उपयोग करके उन्हें ओवरराइड कर सकते हैं।

9

यहाँ HTTPClient (4.3.4) के पिछले संस्करण के साथ कि कैसे करना है

CloseableHttpClient httpclient = HttpClients.createDefault(); 
    try { 
     HttpHost target = new HttpHost("localhost", 443, "https"); 
     HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 

     RequestConfig config = RequestConfig.custom() 
       .setProxy(proxy) 
       .build(); 
     HttpGet request = new HttpGet("/"); 
     request.setConfig(config); 

     System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy); 

     CloseableHttpResponse response = httpclient.execute(target, request); 
     try { 
      System.out.println("----------------------------------------"); 
      System.out.println(response.getStatusLine()); 
      EntityUtils.consume(response.getEntity()); 
     } finally { 
      response.close(); 
     } 
    } finally { 
     httpclient.close(); 
    } 
+0

में काम नहीं करेगा हाय प्रॉक्सी उपयोगकर्ता/पास के लिए क्रेडेंशियल्स कहां सेट करें। क्षमा करें इस पर यकीन नहीं है। – Anand

+0

आप यहां देख सकते हैं http://stackoverflow.com/questions/19252946/apache-http-client-4-3-credentials-per-request –

+0

मैं 'CloseableHttpClient httpclient = HttpClients.createDefault();' का उपयोग कैसे कर सकता हूं? टोमकैट से? मेरे पास एक सर्वलेट है जो स्थैतिक फ़ंक्शन को कॉल करता है जो किसी अन्य सर्वर पर http अनुरोध भेजने का मानता है –

7

हालांकि इस सवाल का बहुत पुराना है, लेकिन मैं अभी भी वहाँ कोई सटीक जवाब कर रहे हैं। मैं यहां सवाल का जवाब देने की कोशिश करूंगा।

मेरा मानना ​​है कि यहां संक्षेप में सवाल अपाचे कॉमन्स HttpClient (org.apache.commons.httpclient.HttpClient) के लिए प्रॉक्सी सेटिंग सेट करने का तरीका है।

कोड नीचे दिए गए स्निपेट काम करना चाहिए:

HttpClient client = new HttpClient(); 
HostConfiguration hostConfiguration = client.getHostConfiguration(); 
hostConfiguration.setProxy("localhost", 8080); 
client.setHostConfiguration(hostConfiguration); 
2

यहाँ है कि कैसे मैं HttpClient वर्ष (< 4.3) के लिए इस समस्या को (जो मैं अपग्रेड नहीं कर सकते) हल, (संतोष सिंह का जवाब जो मैं एक का उपयोग कर दिया +1):

HttpClient httpclient = new HttpClient(); 
if (System.getProperty("http.proxyHost") != null) { 
    try { 
    HostConfiguration hostConfiguration = httpclient.getHostConfiguration(); 
    hostConfiguration.setProxy(System.getProperty("http.proxyHost"), Integer.parseInt(System.getProperty("http.proxyPort"))); 
    httpclient.setHostConfiguration(hostConfiguration); 
    this.getLogger().warn("USING PROXY: "+httpclient.getHostConfiguration().getProxyHost()); 
    } catch (Exception e) { 
    throw new ProcessingException("Cannot set proxy!", e); 
    } 
} 
संबंधित मुद्दे