HttpClient 4.3.x,修正过时代码以使用当前的HttpClient实现。

14

我有下面这段代码,虽然它们仍然可以编译,但都已经过时了:

SSLSocketFactory sslSocketFactory = new SSLSocketFactory(context, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager clientConnectionManager = base.getConnectionManager();
SchemeRegistry schemeRegistry = clientConnectionManager.getSchemeRegistry();
schemeRegistry.register(new Scheme("https", 443, sslSocketFactory));
return new DefaultHttpClient(clientConnectionManager, base.getParams());

我尽力用代码的这部分来替换它:

HttpClientBuilder builder = HttpClientBuilder.create();
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
builder.setConnectionManager(new BasicHttpClientConnectionManager());
builder.setSSLSocketFactory(sslConnectionFactory);
return builder.build();

正如您所看到的,我不知道如何在新部分中包含顶部帖子中的几行代码。我该如何添加需要的代码,例如备用的 SchemeRegistry


嗯,SchemeRegistry的弃用说“已弃用。(4.3)使用Registry”。 - jedison
我已经知道了。由于Registry是一个查找映射表,那我该如何使用它? - Buhake Sindi
3个回答

24

我现在还不能评论,但这里是对herau答案的小升级,因为它在4.4版本之后已经过时了,也许某些人会发现它有用。

SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE);

我有这个遗留代码,HttpPost request = null; HttpResponse response = null;然后在底部 request = new HttpPost(var); response = client.execute(request);这个的替代方案是什么? - Wax

16
HttpClientBuilder builder = HttpClientBuilder.create();
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
builder.setSSLSocketFactory(sslConnectionFactory);

Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
        .register("https", sslConnectionFactory)
        .build();

HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);

builder.setConnectionManager(ccm);

return builder.build();

@Buhake Sindi,你试过我的答案了吗? - herau
1
我确实这样做了。不过我还需要测试一下。 - Buhake Sindi
我不会在生产环境中运行我的代码,因为这只是用来测试我的OAuth实现的,并且要求包括TLS / SSL。 - Buhake Sindi
这些类在哪里?HttpClientBuilderSSLConnectionSocketFactoryHttpClientConnectionManager等等? - Al Lelopath
@AlLelopath,请查看HttpClient库的javadoc - herau

1
如手册所述,我已经将库替换为 NoopHostnameVerifier,并像这样使用它:
    private static CloseableHttpClient client =
        HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接