以下是一个示例,展示如何在Java中创建一个只创建一次客户端实例,并在多次调用时重复使用的HTTP客户端:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class ReusableHttpClient {
private static final int CONNECTION_TIMEOUT = 5000; // 连接超时时间
private static final int SOCKET_TIMEOUT = 5000; // 读取超时时间
private CloseableHttpClient httpClient;
public ReusableHttpClient() {
// 创建HTTP客户端实例
httpClient = HttpClientBuilder.create().build();
}
public String sendPostRequest(String url, String jsonData) {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
StringEntity entity = new StringEntity(jsonData, "UTF-8");
httpPost.setEntity(entity);
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(CONNECTION_TIMEOUT)
.setSocketTimeout(SOCKET_TIMEOUT)
.build();
httpPost.setConfig(requestConfig);
try {
HttpResponse response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
return EntityUtils.toString(responseEntity);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void close() {
try {
// 关闭HTTP客户端
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述示例中,我们创建了一个名为ReusableHttpClient
的类,其中包含一个CloseableHttpClient
实例作为成员变量。在类的构造函数中,我们创建了一次HTTP客户端实例并将其赋值给成员变量。然后,我们定义了一个sendPostRequest
方法,该方法接受URL和JSON数据作为参数,并使用成员变量httpClient
执行HTTP请求。最后,我们提供了一个close
方法,用于关闭HTTP客户端。
您可以在需要发送HTTP请求的地方创建一个ReusableHttpClient
实例,并多次调用sendPostRequest
方法来发送POST请求。最后,确保在不再需要使用ReusableHttpClient
实例时调用close
方法来关闭HTTP客户端。
请注意,由于ReusableHttpClient
类中的httpClient
成员变量是多个方法共享的,因此您可以在多个地方使用相同的ReusableHttpClient
实例来发送HTTP请求。