2012-04-24 8 views
5

私はこの質問に答えて自分自身を助けません。Apache HttpClientのnonProxyHostsを設定してください。4.1.3

Apache HttpClient 4.1.3でnonProxyHostsを設定するにはどうすればよいですか?

古いHttpclient 3.xではかなりシンプルでした。 Uは、setNonProxyHostsメソッドを使用して設定できます。

しかし、今では新しいバージョンと同等の方法はありません。私は、APIのドキュメント、チュートリアル、サンプルを探していて、これまでに解決策を見つけていませんでした。

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でのボックス・ソリューションのうちがある場合、確認または実行します:uはちょうどこのことにより、それを行うことができ、通常のプロキシを設定する

私は自分のようにそれをしなければならない

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

ありがとうございます。

+0

私はこの問題をproxyselectorを使って解決できました。 – Jools

+0

あなたは解決策をコミットしてください。私は同じ問題を抱えています。 4.0 ProxySelectorRoutePlanner'は廃止予定ですので – 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); 

あなたのLinkcheckerProxySelector()はそのようなものを望みます。

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

です。 docは 'SystemDefaultRoutePlanner'を使用するように指示します。とにかく私は環境に基づいて新しい方法を提案します – boly38

1

ただ見つけたthis answer。それを行うための簡単な方法は、オレグが語ったように、デフォルトのシステムプランナーを設定することです:

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

をデフォルトnullのargではとにかくあなたがあなた自身を定義し、カスタマイズすることができProxySelector.getDefault()

で設定されます。ここの別の例:EnvBasedProxyRoutePlanner.java (gist)

関連する問題