Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Apache HttpClient 4.1.3中设置非Proxy主机_Proxy_Apache Httpclient 4.x - Fatal编程技术网

在Apache HttpClient 4.1.3中设置非Proxy主机

在Apache HttpClient 4.1.3中设置非Proxy主机,proxy,apache-httpclient-4.x,Proxy,Apache Httpclient 4.x,我就是忍不住回答这个问题 如何在Apache HttpClient 4.1.3中设置非Proxy主机 在旧的Httpclient 3.x中,这非常简单。你可以使用setNonProxyHosts方法设置它 但是现在,没有新版本的等效方法。我一直在浏览api文档、教程和示例,到目前为止还没有找到解决方案 要设置普通代理,您可以通过以下方式进行设置: HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); DefaultHt

我就是忍不住回答这个问题

如何在Apache HttpClient 4.1.3中设置非Proxy主机

在旧的Httpclient 3.x中,这非常简单。你可以使用setNonProxyHosts方法设置它

但是现在,没有新版本的等效方法。我一直在浏览api文档、教程和示例,到目前为止还没有找到解决方案

要设置普通代理,您可以通过以下方式进行设置:

    HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");
    DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
有人知道新版本的httpclient 4.1.3中是否有现成的解决方案用于设置非ProxyHost,还是我必须自己做

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

提前谢谢

@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;
}
私有类LinkCheckerProxySelector扩展ProxySelector{
@凌驾
公共列表选择(最终URI){
List proxyList=new ArrayList();
InetAddress addr=null;
试一试{
addr=InetAddress.getByName(uri.getHost());
}捕获(未知后异常e){
抛出新HostNotFoundWrappedException(e);
}
字节[]ipAddr=addr.getAddress();
//转换为点表示法
字符串ipAddrStr=“”;
对于(int i=0;i0){
ipAddrStr+=”;
}
ipAddrStr+=ipAddr[i]&0xFF;
}
//如果URI以10开头,则仅选择一个代理*
如果(!ipaddstr.startsWith(“10”)){
返回ProxySelector.getDefault().select(uri);
}否则{
proxyList.add(Proxy.NO_Proxy);
}
还原还原剂;
}
因此,我希望这将对您有所帮助。

刚刚找到。快速实现这一点的方法是设置默认的系统计划器,如oleg告诉:

HttpClientBuilder getClientBuilder() {
    HttpClientBuilder clientBuilder = HttpClientBuilder.create();
    SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(null);
    clientBuilder.setRoutePlanner(routePlanner);
    return clientBuilder;
}
默认情况下,
null
arg将使用
ProxySelector.getDefault()


无论如何,您可以定义和自定义自己的。这里的另一个示例:

我可以使用proxyselector解决此问题。您是否可以提交您的解决方案,我遇到了相同的问题。由于4.0
ProxySelectorRoutePlanner
已被弃用;doc告诉您改用
SystemDefaultRoutePlanner
。无论如何,我都会建议您一种基于环境的新方法