Java 阻止Apache HttpClient 4访问特定路由

Java 阻止Apache HttpClient 4访问特定路由,java,http,apache-httpclient-4.x,Java,Http,Apache Httpclient 4.x,给HttpClient一个应该禁止访问的路由、主机名和IP地址列表的最简单方法是什么 类似于以下内容(此代码不起作用,您现在无法设置0): final Set sitesToBlock=new HashSet(); add(新的HttpHost(“example.com”,80)); DefaultRoutePlanner routePlanner=新的DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE){ @凌驾 公共HttpRoute

给HttpClient一个应该禁止访问的路由、主机名和IP地址列表的最简单方法是什么

类似于以下内容(此代码不起作用,您现在无法设置0):

final Set sitesToBlock=new HashSet();
add(新的HttpHost(“example.com”,80));
DefaultRoutePlanner routePlanner=新的DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE){
@凌驾
公共HttpRoute determiniteroute(
最终HttpHost主机、最终HttpRequest请求、最终HttpContext上下文)引发HttpException{
最终HttpRoute路由=super.determineRoute(主机、请求、上下文);
if(sitesToBlock.contains(route.getTargetHost())){
抛出新的HttpException(“到“+主机+”的连接被阻止”);
}
返回路线;
}
};
CloseableHttpClient=HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();
}

Block究竟是如何实现的?抛出异常是否足够好?很好的解决方案,但是为什么不简单地使用
sitesToBlock.contains(host)
而不是访问路由的目标主机呢?路由规划器还有许多功能可以解析默认端口:->@oleg它对主机名非常有效,谢谢!是否存在类似于阻止IP地址的情况?@Shcheklein Custom DnsResolver是另一种基于对方端点的IP而不是路由拒绝连接的方法。但请注意,使用DnsResolver时无法区分代理连接和直接连接。完整的路线将不可用。
HttpHost block = new HttpHost("example.com", 80);
cm.setMaxPerRoute(new HttpRoute(block), 0);
final Set<HttpHost> sitesToBlock = new HashSet<HttpHost>();
sitesToBlock.add(new HttpHost("example.com", 80));

DefaultRoutePlanner routePlanner = new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {

    @Override
    public HttpRoute determineRoute(
            final HttpHost host, final HttpRequest request, final HttpContext context) throws HttpException {

        final HttpRoute route = super.determineRoute(host, request, context);
        if (sitesToBlock.contains(route.getTargetHost())) {
            throw new HttpException("Connection to " + host + " is blocked");
        }
        return route;
    }
};

CloseableHttpClient client = HttpClients.custom()
        .setRoutePlanner(routePlanner)
        .build();

}