Java HTTP 请求的四种实现方式:Apache HttpClient、OkHttp、WebClient 与 Java 11 HttpClient
目录
1.使用Java11+内置的`HttpClient`
2.使用OkHttp
3.使用SpringWebClient
4.使用ApacheHttpClient5.x
在现代Java开发中,`HttpClient`和`PostMethod`是较旧的ApacheHttpClient3.x的API。推荐使用更现代的技术来替代这些代码,例如Java11+内置的`HttpClient`或第三方库如OkHttp或SpringWebClient。
以下是使用这些技术的替代方案:
1.使用Java11+内置的`HttpClient`
Java11引入了新的`HttpClient`API,支持同步和异步请求,功能强大且易于使用。
java代码: importjava.net.URI; importjava.net.http.HttpClient; importjava.net.http.HttpRequest; importjava.net.http.HttpResponse; publicclassHttpClientExample{ publicstaticvoidmain(String[]args)throwsException{ Stringurl="https://example.com/api"; //创建HttpClient实例 HttpClienthttpClient=HttpClient.newHttpClient(); //创建POST请求 HttpRequestrequest=HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type","application/json")//设置请求头 .POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}"))//设置请求体 .build(); //发送请求并获取响应 HttpResponseresponse=httpClient.send(request,HttpResponse.BodyHandlers.ofString()); //获取响应状态码和响应体 intstatusCode=response.statusCode(); StringresponseBody=response.body(); System.out.println("StatusCode:"+statusCode); System.out.println("ResponseBody:"+responseBody); } }
优点:
-内置在JDK11+中,无需额外依赖。
-支持同步和异步请求。
-代码简洁易读。
2.使用OkHttp
OkHttp是一个广泛使用的第三方HTTP客户端库,功能强大且性能优异。
添加依赖(Maven):
com.squareup.okhttp3 okhttp 4.12.0
示例代码:
(图片来源网络,侵删)
importokhttp3.*; importjava.io.IOException; publicclassOkHttpExample{ publicstaticvoidmain(String[]args){ Stringurl="https://example.com/api"; //创建OkHttpClient实例 OkHttpClientclient=newOkHttpClient(); //创建请求体 MediaTypemediaType=MediaType.parse("application/json"); RequestBodybody=RequestBody.create("{\"key\":\"value\"}",mediaType); //创建POST请求 Requestrequest=newRequest.Builder() .url(url) .post(body) .build(); //发送请求并获取响应 try(Responseresponse=client.newCall(request).execute()){ intstatusCode=response.code(); StringresponseBody=response.body().string(); System.out.println("StatusCode:"+statusCode); System.out.println("ResponseBody:"+responseBody); }catch(IOExceptione){ e.printStackTrace(); } } }
优点:
-功能丰富,支持连接池、缓存、拦截器等。
(图片来源网络,侵删)
-性能优异。
-易于集成到现有项目中。
(图片来源网络,侵删)
3.使用SpringWebClient
如果您使用的是Spring框架(特别是SpringWebFlux),可以使用`WebClient`来发送HTTP请求。`WebClient`是Spring5引入的非阻塞HTTP客户端。
添加依赖(Maven):
org.springframework.boot spring-boot-starter-webflux
示例代码:
importorg.springframework.web.reactive.function.client.WebClient; importreactor.core.publisher.Mono; publicclassWebClientExample{ publicstaticvoidmain(String[]args){ Stringurl="https://example.com/api"; //创建WebClient实例 WebClientwebClient=WebClient.create(); //发送POST请求 Monoresponse=webClient.post() .uri(url) .header("Content-Type","application/json") .bodyValue("{\"key\":\"value\"}") .retrieve() .bodyToMono(String.class); //获取响应 response.subscribe(body->{ System.out.println("ResponseBody:"+body); }); } }
优点:
-非阻塞、响应式编程模型。
-与Spring生态无缝集成。
-支持流式处理。
4.使用ApacheHttpClient5.x
如果您仍然希望使用ApacheHttpClient,可以升级到最新的5.x版本。
添加依赖(Maven):
org.apache.httpcomponents.client5 httpclient5 5.2.1
示例代码:
importorg.apache.hc.client5.http.classic.methods.HttpPost; importorg.apache.hc.client5.http.classic.methods.HttpUriRequestBase; importorg.apache.hc.client5.http.impl.classic.CloseableHttpClient; importorg.apache.hc.client5.http.impl.classic.CloseableHttpResponse; importorg.apache.hc.client5.http.impl.classic.HttpClients; importorg.apache.hc.core5.http.io.entity.EntityUtils; importorg.apache.hc.core5.http.io.entity.StringEntity; publicclassHttpClient5Example{ publicstaticvoidmain(String[]args)throwsException{ Stringurl="https://example.com/api"; //创建HttpClient实例 try(CloseableHttpClienthttpClient=HttpClients.createDefault()){ //创建POST请求 HttpPosthttpPost=newHttpPost(url); httpPost.setHeader("Content-Type","application/json"); httpPost.setEntity(newStringEntity("{\"key\":\"value\"}")); //发送请求并获取响应 try(CloseableHttpResponseresponse=httpClient.execute(httpPost)){ intstatusCode=response.getCode(); StringresponseBody=EntityUtils.toString(response.getEntity()); System.out.println("StatusCode:"+statusCode); System.out.println("ResponseBody:"+responseBody); } } } }
优点:
-功能强大,支持高级特性。
-适合需要复杂HTTP操作的场景。
总结
技术 | 适用场景 | 优点 |
---|---|---|
Java 11+ HttpClient | 无需额外依赖,JDK 内置 | 简洁、现代,支持同步和异步 |
OkHttp | 高性能、功能丰富 | 易于使用,支持连接池、缓存等 |
Spring WebClient | Spring 项目,响应式编程 | 非阻塞,与 Spring 生态集成 |
Apache HttpClient 5 | 需要复杂 HTTP 操作 | 功能强大,适合高级场景 |
根据您的项目需求选择合适的技术。如果项目已经使用Spring,推荐使用`WebClient`;如果需要高性能和简洁性,推荐使用OkHttp或Java11+的`HttpClient`。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。