5

私はこの質問に答えることによって自分自身を助けることはできません。

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

古いHttpclient3.xでは、これは非常に単純でした。setNonProxyHostsメソッドを使用して設定できます。

しかし現在、新しいバージョンに相当する方法はありません。私はAPIドキュメント、チュートリアル、例を調べてきましたが、これまでのところ解決策を見つけていません。

通常のプロキシを設定するには、次のようにします。

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

nonProxyHostsを設定するための新しいバージョンhttpclient4.1.3にすぐに使えるソリューションがあるかどうか誰かが知っていますか、それとも私は自分でそれをする必要がありますか?

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

前もって感謝します。

4

2 に答える 2

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;
}

だから私はこれがあなたを助けることを願っています.

于 2013-03-27T09:44:37.803 に答える
1

この回答が見つかりました。それを行う簡単な方法は、オレグが言ったようにデフォルトのシステムプランナーを設定することです:

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

デフォルトでnullは、引数は次のように設定されますProxySelector.getDefault()

とにかく、独自に定義してカスタマイズできます。別の例: EnvBasedProxyRoutePlanner.java (gist)

于 2015-09-18T13:49:46.507 に答える