程序员开发实例大全宝库

网站首页 > 编程文章 正文

HttpClient连接池进行高效HTTP请求的Java示例

zazugpt 2024-08-12 03:24:15 编程文章 34 ℃ 0 评论
<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
</dependencies>

这个配置文件只包含了一个依赖项,即Apache HttpComponents的HttpClient库,版本为4.5.13

以下是使用HttpClient连接池进行高效HTTP请求的Java示例

import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
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.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

public class HttpDemo {
    // 最大连接数
    private static final int MAX_TOTAL_CONNECTIONS = 50;
    // 每个路由最大连接数
    private static final int MAX_PER_ROUTE = 10;
    // 连接超时时间
    private static final int CONNECTION_TIMEOUT = 5000;
    // 套接字超时时间
    private static final int SOCKET_TIMEOUT = 5000;

    // 创建连接池管理器
    private static final PoolingHttpClientConnectionManager connectionManager =
            new PoolingHttpClientConnectionManager();
    
    static {
        // 设置连接池的最大连接数和每个路由的最大连接数
        connectionManager.setMaxTotal(MAX_TOTAL_CONNECTIONS);
        connectionManager.setDefaultMaxPerRoute(MAX_PER_ROUTE);
    }

    public static void main(String[] args) throws Exception {
        String url = "http://www.example.com";
        String body = "request body";

        // 创建HttpClient对象
        HttpClient httpClient = HttpClientBuilder.create()
                // 将连接池设置到HttpClient中
                .setConnectionManager(connectionManager)
                // 设置请求超时时间和套接字超时时间
                .setDefaultRequestConfig(RequestConfig.custom()
                        .setConnectTimeout(CONNECTION_TIMEOUT)
                        .setSocketTimeout(SOCKET_TIMEOUT)
                        .build())
                .build();

        // 创建HttpPost对象,并设置请求URL和请求体
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new StringEntity(body));

        // 发送请求,并获取响应结果
        HttpEntity responseEntity = httpClient.execute(httpPost).getEntity();
        String response = EntityUtils.toString(responseEntity, "UTF-8");

        System.out.println(response);
    }
}

在这个示例中,我们使用了HttpClient连接池来提高HTTP请求的效率。首先,我们定义了一些常量,包括最大连接数、每个路由最大连接数、连接超时时间和套接字超时时间。然后,我们创建了一个PoolingHttpClientConnectionManager对象,该对象管理连接池。我们将最大连接数和每个路由的最大连接数设置为常量的值。

接下来,我们使用HttpClientBuilder创建HttpClient对象,并将连接池设置到HttpClient中。我们还设置了请求超时时间和套接字超时时间,这些设置会应用于HttpClient的所有请求。最后,我们发送了一个HTTP POST请求,并获取了响应结果。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表