使用 CloseableHttpClient 而不是 ClientBuilder



我有一个javax.ws.rs.client ClientBuilder来创建httpClient,它接受一些查询参数并执行它。

Client client = ClientBuilder.newClient();
WebTarget target = client.target(LOCAL_BASE).path(APP_INFO_URI).queryParam("some_param", "true");
response = target.request().header("Content-Type", MediaType.APPLICATION_JSON).get();

我需要改用CloseableHttpClient httpClient。我已经能够创建客户端,但不确定如何从这里继续前进。

RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(9000)
.setConnectTimeout(2000)
.setConnectionRequestTimeout(1400)
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(2); 
cm.setDefaultMaxPerRoute(2); 
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(requestConfig).build();

有人可以帮我使用CloseableHttpClient httpClient吗,如何以ClientBuilder的方式获得响应?

谢谢

您可能需要通过实现ResponseHandler类型(或其适配器/包装器之一(来实现响应处理程序,然后调用具体/构建CloseableHttpClientexecute()方法

这就是我能够启动httpClient,获取状态和有效负载的方式。

private void invokeHttpClient() throws URISyntaxException {
// Build the server URI together with the parameters you wish to pass
uriBuilder = new URIBuilder(LOCAL_BASE+APP_INFO_URI);
// Create a socketfactory in order to use an http connection manager
PlainConnectionSocketFactory plainSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
Registry<ConnectionSocketFactory> connSocketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", plainSocketFactory)
.build();
connManager = new PoolingHttpClientConnectionManager(connSocketFactoryRegistry);
connManager.setMaxTotal(2); 
connManager.setDefaultMaxPerRoute(2); 
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(1000)
.setConnectionRequestTimeout(1000)
.build();
httpClient = HttpClients.custom()
.setConnectionManager(connManager)
.setDefaultRequestConfig(requestConfig).build();
List<NameValuePair> postParameters = new ArrayList<>();
postParameters.add(new BasicNameValuePair(SomeParam, "Value"));
uriBuilder.addParameters(postParameters);
HttpGet postRequest = new HttpGet(uriBuilder.build());
postRequest.setHeader("Content-Type", "application/json");
response = httpClient.execute(postRequest);
int statusCode = response.getStatusLine().getStatusCode();
String payload = EntityUtils.toString((HttpEntity)response.getEntity());
}

参考 - 堆栈溢出现有帖子。

最新更新