当前位置: 首页 > wzjs >正文

备案号放网站下面居中收录网站有哪些

备案号放网站下面居中,收录网站有哪些,scratch网站开发,网站文章更新要求目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传(Multipart) 总结 前言 …

目录

前言

一、Apache HttpClient简介

二、HttpClient基础使用

1. 添加依赖

2. 创建HttpClient实例

3. 发送GET请求

4. 发送POST请求

三、HttpClient高级配置与实战案例

1. 连接池优化

2. 超时与重试配置

3. 文件上传(Multipart)

总结


前言

在Java 11之前的版本中,标准库提供的HttpURLConnection功能较为基础,难以满足复杂HTTP场景(如连接池管理、异步请求、灵活重试等)的需求。Apache HttpClient(属于Apache HttpComponents项目)作为Java生态中最成熟、功能最全面的HTTP客户端库之一,长期被广泛应用于企业级开发。本文将从设计、基础用法到实战案例,系统讲解Apache HttpClient的技术细节。


一、Apache HttpClient简介

Apache HttpClient是由Apache软件基金会维护的一款开源HTTP客户端库,它全面支持HTTP/1.1协议,并为用户提供了一系列强大的核心能力,使其成为开发高效、可靠网络应用的理想选择,其提供以下核心能力:

  • 连接池管理:Apache HttpClient内置了高效的连接池管理机制,能够复用TCP连接,从而显著减少连接建立和断开的握手开销。通过连接池,客户端能够在多个请求之间共享连接,这不仅提升了性能,还降低了资源消耗。
  • 灵活的请求配置:该库提供了丰富的配置选项,支持设置请求超时、配置代理服务器、管理重定向策略、处理Cookie以及实现身份认证等,这些配置选项使得HttpClient能够灵活应对各种复杂的网络环境和请求需求。
  • 扩展性:Apache HttpClient通过拦截器(Interceptor)机制,允许用户自定义日志记录、请求重试、响应缓存等逻辑,拦截器机制使得HttpClient具有高度的可扩展性,能够轻松集成到各种复杂的系统中。
  • 同步/异步请求支持:HttpClient不仅兼容传统的阻塞I/O模型,允许用户发起同步请求并等待响应,还提供了异步非阻塞请求的支持(需结合异步HTTP客户端)。异步请求支持使得HttpClient能够处理大量并发请求,同时保持应用的响应性和可扩展性。

用户在选择HttpClient版本时,需要根据项目的具体需求、目标Java版本以及对新特性的需求进行权衡,版本选择如下:

  • HttpClient 4.x:作为广泛使用的稳定版本,HttpClient 4.x已经经过了充分的测试和验证,适用于大多数应用场景。
  • HttpClient 5.x:作为新一代API,HttpClient 5.x在性能和功能上进行了多项改进,并支持HTTP/2协议(需Java 8及以上版本)。

二、HttpClient基础使用

1. 添加依赖

为了在Java项目中使用Apache HttpClient,需要在项目的构建文件中添加相应的依赖,Maven配置如下(以4.5.13版本为例):

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>

2. 创建HttpClient实例

创建默认实例:

为了发送HTTP请求,需要创建一个CloseableHttpClient实例,可以通过HttpClients.createDefault()方法直接获取预配置的HttpClient实例,该实例采用以下默认参数:

CloseableHttpClient httpClient = HttpClients.createDefault();

非默认配置的实例

以下案例展示如何通过HttpClientBuilder定制化配置CloseableHttpClient,覆盖连接超时、代理、重试策略、SSL证书校验等关键参数:

import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
import java.util.concurrent.TimeUnit;public class ApacheHttpClientExample {public static CloseableHttpClient createCustomHttpClient() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {// 连接池配置PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();connManager.setMaxTotal(200);          // 最大连接数connManager.setDefaultMaxPerRoute(50); // 每个路由(目标主机)的最大并发连接数connManager.closeIdleConnections(60, TimeUnit.SECONDS); // 关闭空闲超时连接// 超时配置RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)    // 连接建立超时(5秒).setSocketTimeout(15000)    // 数据传输超时(15秒).setConnectionRequestTimeout(3000) // 从连接池获取连接的超时(3秒).build();// SSL配置(信任自签名证书)SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(new TrustSelfSignedStrategy()).build();SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext,new String[]{"TLSv1.2", "TLSv1.3"}, // 支持的协议版本null,SSLConnectionSocketFactory.getDefaultHostnameVerifier());// 重试策略StandardHttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler(3,      // 最大重试次数true    // 对非幂等请求(如POST)也重试(需业务确保安全性));// 构建HttpClientreturn HttpClientBuilder.create().setConnectionManager(connManager)          // 连接池.setDefaultRequestConfig(requestConfig)     // 超时配置.setSSLSocketFactory(sslSocketFactory)      // SSL配置.setRetryHandler(retryHandler)              // 重试策略.setProxy(new HttpHost("proxy.example.com", 8080)) // 代理服务器.disableCookieManagement()                  // 禁用Cookie管理(按需启用).setUserAgent("Custom-Client/1.0")          // 自定义User-Agent.addInterceptorFirst((HttpRequestInterceptor) (request, context) ->request.addHeader("X-Request-ID", UUID.randomUUID().toString())) // 自定义请求头.build();}public static void main(String[] args) {try {CloseableHttpClient httpClient = createCustomHttpClient();// 使用httpClient进行HTTP请求// ...} catch (Exception e) {e.printStackTrace();}}
}

3. 发送GET请求

发送GET请求是HttpClient最常见的用法之一,以下是一个使用Apache HttpClient库发送HTTP GET请求的案例:

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class ApacheHttpClientExample {public static void main(String[] args) {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet request = new HttpGet("https://jsonplaceholder.typicode.com/posts/1");try (CloseableHttpResponse response = httpClient.execute(request)) {System.out.println("Status Code: " + response.getStatusLine().getStatusCode());String responseBody = EntityUtils.toString(response.getEntity());System.out.println("Response Body: " + responseBody);}} catch (Exception e) {e.printStackTrace();}}
}

该案例在main方法中,使用try-with-resources语句创建了CloseableHttpClient实例,该实例负责发送HTTP请求,并创建了一个HttpGet请求对象,目标URL指向https://jsonplaceholder.typicode.com/posts/1(提供假数据的API)。然后再次使用try-with-resources语句执行该请求并获取CloseableHttpResponse响应对象。在响应对象的作用域内,程序打印了HTTP响应的状态码,并使用EntityUtils.toString方法将响应实体转换为字符串,最后打印出响应体的内容。如果在执行请求或处理响应时发生任何异常,这些异常将被捕获并打印到标准错误输出。

https://jsonplaceholder.typicode.com/posts/1的内容如下:

运行结果:

4. 发送POST请求

发送POST请求与GET请求类似,只是需要在请求体中包含要发送的数据,通常POST请求用于提交表单数据或JSON数据。以下案例展示了如何使用Apache HttpClient库在Java中发送一个包含JSON请求体的HTTP POST请求,并处理响应。

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class ApacheHttpClientExample {public static void main(String[] args) {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpPost request = new HttpPost("https://jsonplaceholder.typicode.com/posts");// 设置JSON请求体String json = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";request.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));// 添加自定义请求头request.addHeader("X-Custom-Header", "value");try (CloseableHttpResponse response = httpClient.execute(request)) {System.out.println("Status Code: " + response.getStatusLine().getStatusCode());String responseBody = EntityUtils.toString(response.getEntity());System.out.println("Response Body: " + responseBody);}} catch (Exception e) {e.printStackTrace();}}
}

在方法中,利用try-with-resources语句创建了CloseableHttpClient实例以确保资源正确关闭。之后创建HttpPost请求对象并指向目标URL,设置了JSON格式的请求体内容类型,并附加了自定义请求头,通过执行请求并捕获响应,程序打印了HTTP响应的状态码和响应体内容。

运行结果:

Status Code: 201
Response Body: {"title":"foo","body":"bar","userId":1,"id":101}

三、HttpClient高级配置与实战案例

1. 连接池优化

在高性能的HTTP客户端应用中,连接池的管理是至关重要的。Apache HttpClient库提供了一个强大的工具PoolingHttpClientConnectionManager,它允许开发者高效地管理和复用HTTP连接,从而显著提升应用的性能和资源利用率。通过PoolingHttpClientConnectionManager管理连接池的案例如下:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;public class ApacheHttpClientExample {public static void main(String[] args) {PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();connManager.setMaxTotal(200);          // 最大连接数connManager.setDefaultMaxPerRoute(20); // 每个路由(目标主机)的最大连接数try (CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build()) {// 执行高并发请求...} catch (Exception e) {e.printStackTrace();}}
}

2. 超时与重试配置

在构建高性能、高可靠性的HTTP客户端应用时,超时与重试配置是两个至关重要的方面,它们不仅影响应用的响应速度,还直接关系到应用的稳定性和用户体验。设置超时与重试配置的案例如下:

import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;public class ApacheHttpClientExample {public static void main(String[] args) {RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)    // 连接超时5秒.setSocketTimeout(10000)    // 数据传输超时10秒.build();// 自定义重试策略(默认重试3次)HttpClientBuilder builder = HttpClients.custom().setDefaultRequestConfig(requestConfig).setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));try (CloseableHttpClient httpClient = builder.build()) {// 执行请求...} catch (Exception e) {e.printStackTrace();}}
}

3. 文件上传(Multipart)

为了在Java项目中使用Apache HttpClient进行文件上传,需要在项目的构建文件中添加相应的依赖,Maven配置如下(以4.5.13版本为例):

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version>
</dependency>

以下是一个使用了Apache HttpClient来发送包含文件上传HTTP POST请求的案例:

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;import java.io.File;public class ApacheHttpClientExample {public static void main(String[] args) {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpPost request = new HttpPost("https://example.com/upload");// 构建Multipart请求体MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addPart("file", new FileBody(new File("test.txt")));builder.addTextBody("comment", "Sample File");request.setEntity(builder.build());try (CloseableHttpResponse response = httpClient.execute(request)) {// 处理响应...}} catch (Exception e) {e.printStackTrace();}}
}

总结

Apache HttpClient在Java 11之前的版本中是处理复杂HTTP通信的首选方案。通过灵活的配置、高效的连接池管理和丰富的扩展能力,它能够满足企业级应用的高性能需求。然而,随着Java 11+标准库HttpClient的普及,新项目建议优先使用原生方案,而旧系统仍可依赖Apache HttpClient的稳定性和成熟生态。


文章转载自:

http://rY0nIbNb.ycgrL.cn
http://JEzBLMrz.ycgrL.cn
http://z27lrpBU.ycgrL.cn
http://kLatVFif.ycgrL.cn
http://SPaSIZve.ycgrL.cn
http://KboRASOu.ycgrL.cn
http://N7K2i3zL.ycgrL.cn
http://TkklTrGA.ycgrL.cn
http://NUvJDycQ.ycgrL.cn
http://DcWcpqCg.ycgrL.cn
http://f3nExOYf.ycgrL.cn
http://VMmBs8Hh.ycgrL.cn
http://wgjruQ7z.ycgrL.cn
http://uNgugqng.ycgrL.cn
http://8hETdr2E.ycgrL.cn
http://heJsEk5F.ycgrL.cn
http://TzXIIXVD.ycgrL.cn
http://OsBbVzcY.ycgrL.cn
http://4WhxXt6J.ycgrL.cn
http://I4bvWcOd.ycgrL.cn
http://0qyWPGoe.ycgrL.cn
http://mUS1wzcb.ycgrL.cn
http://yPvXX90B.ycgrL.cn
http://pHhllZVB.ycgrL.cn
http://oEaME5Bm.ycgrL.cn
http://B3rFPlmZ.ycgrL.cn
http://oC0Fhzcu.ycgrL.cn
http://EDKviLsD.ycgrL.cn
http://5lKwHMnL.ycgrL.cn
http://h46rdkbc.ycgrL.cn
http://www.dtcms.com/wzjs/717988.html

相关文章:

  • 电商网站建设教案从化一站式网站建设
  • 惠州网站小程序建设点南昌企业建设网站设计
  • 一级a做爰片不卡的网站最近有哪些新闻
  • 北京建设工程交易协会网站企业网站必须做可信网站认证
  • 云建站网址网站图片尺寸
  • 网站建设骗黑马程序员教程
  • 赵公口网站建设wordpress更新提示ftp
  • 网站页面设计规范电脑零基础培训学校
  • 南京移动网站设计广告营销策划是做什么的
  • 湖州做网站推广的公司wordpress电子商务插件
  • 做网站的抬头标语怎么做冷水滩城乡建设局网站
  • 网站上传到虚拟主机市场策划是做什么的
  • 有关建设旅游网站的公司软件系统开发合同
  • 企业模板建站公司南京比较好的网络策划公司
  • 网站建设设计未来前景上海网站建设流
  • 珠海营销型网站哪家好广州 网站建设公司
  • 江西企业网站建设网站品牌推广公司
  • 优质做网站哪家好品牌设计包装
  • 百度首页网站的设计中企动力科技有限公司怎么样
  • 莆田企业自助建站系统多多进宝怎么做自己网站
  • 顺德手机网站设计价位家政门户网站源码
  • 酒店网站设计方案网站展示程序
  • 公司网站如何做客户关系管理
  • 营销型企业网站的建设方案江苏建设网
  • 智慧旅游网站建设方案ppt模板中国电力建设股份部官方网站
  • 专业维护网站的公司微信公众平台设计
  • 企业门户网站作用静态网页设计代码模板
  • 免费网站制作三合一收款码seo优化教程培训
  • 青海建设厅网站证件查询佛山建站软件
  • 重庆网站推广 软件北京做公司网站