2012-04-24 12 views
5

मैं इस प्रश्न का उत्तर देकर स्वयं सहायता नहीं कर सकता।Apache HttpClient में nonProxyHosts सेट करें 4.1.3

मैं अपाचे एचटीपी क्लाइंट 4.1.3 में nonProxyHosts कैसे सेट कर सकता हूं?

पुराने Httpclient 3.x में जो काफी सरल था। यू बस setNonProxyHosts विधियों का उपयोग कर इसे सेट कर सकता है।

लेकिन अब, नए संस्करण के लिए कोई समकक्ष विधि नहीं है। मैं एपीआई दस्तावेज़, ट्यूटोरियल और उदाहरणों को देख रहा हूं और अब तक समाधान मिला है।

एक सामान्य प्रॉक्सी सेट करने के यू सिर्फ इस से यह कर सकते हैं:

HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

अगर वहाँ nonProxyHosts तक का गठन कर के लिए नया संस्करण httpclient 4.1.3 में बॉक्स समाधान की एक बाहर है किसी को भी पता है मुझे इसे अपने

if (targetHost.equals(nonProxyHost) { 
    dont use a proxy 
    } 

अग्रिम धन्यवाद।

+0

मैं प्रॉक्सी चयनकर्ता का उपयोग करके इस समस्या को हल कर सकता हूं। – Jools

+0

क्या आप अपना समाधान कर सकते हैं, मैं एक ही समस्या में चल रहा हूं। – moohkooh

उत्तर

3

@moohkooh: यहां मैंने समस्या को हल किया है।

DefaultHttpClient client = new DefaultHttpClient(); 

//use same proxy as set in the system properties by setting up a routeplan 
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(client.getConnectionManager().getSchemeRegistry(), 
    new LinkCheckerProxySelector()); 
client.setRoutePlanner(routePlanner); 

और फिर आपके लिंकशेकरप्रॉक्सी चयनकर्ता() को ऐसा कुछ पसंद आएगा।

private class LinkCheckerProxySelector extends ProxySelector { 

@Override 
public List<Proxy> select(final URI uri) { 

    List<Proxy> proxyList = new ArrayList<Proxy>(); 

    InetAddress addr = null; 
    try { 
    addr = InetAddress.getByName(uri.getHost()); 
    } catch (UnknownHostException e) { 
    throw new HostNotFoundWrappedException(e); 
    } 
    byte[] ipAddr = addr.getAddress(); 

    // Convert to dot representation 
    String ipAddrStr = ""; 
    for (int i = 0; i < ipAddr.length; i++) { 
    if (i > 0) { 
     ipAddrStr += "."; 
    } 
    ipAddrStr += ipAddr[i] & 0xFF; 
    } 

//only select a proxy, if URI starts with 10.* 
    if (!ipAddrStr.startsWith("10.")) { 
    return ProxySelector.getDefault().select(uri); 
    } else { 
    proxyList.add(Proxy.NO_PROXY); 
    } 
    return proxyList; 
} 

तो मुझे आशा है कि इससे आपकी मदद मिलेगी।

+0

4.0 'ProxySelectorRoutePlanner' को बहिष्कृत कर दिया गया है; डॉक्टर 'SystemDefaultRoutePlanner'instead का उपयोग करने के लिए कहें। वैसे भी मैं पर्यावरण के आधार पर एक नया तरीका सुझाऊंगा – boly38

1

बस this answer मिला। त्वरित तरीका है कि ऐसा करने के लिए Oleg बताया की तरह डिफ़ॉल्ट सिस्टम योजनाकार स्थापित करने के लिए है:

HttpClientBuilder getClientBuilder() { 
    HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 
    SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(null); 
    clientBuilder.setRoutePlanner(routePlanner); 
    return clientBuilder; 
} 

डिफ़ॉल्ट रूप से null आर्ग ProxySelector.getDefault()

वैसे भी आप को परिभाषित करने और अपने खुद के अनुकूलित कर सकता है के साथ स्थापित किया जाएगा। यहां एक और उदाहरण: EnvBasedProxyRoutePlanner.java (gist)

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