1. 什么是HttpClient?

HttpClient是Java 11中引入的一个新特性,用于支持同步和异步发送HTTP请求以及处理HTTP响应。它提供了简单易用的API,使得发送HTTP请求变得非常简单。

2. HttpClient的主要组件

HttpClient由以下几个主要组件组成:

  • HttpClient:用于发送请求的主要类。
  • HttpRequest:表示一个HTTP请求。
  • HttpResponse:表示一个HTTP响应。

3. 发送GET请求

要使用HttpClient发送GET请求,可以创建一个HttpClient对象,然后创建一个HttpRequest对象并设置请求方法为GET。最后,使用HttpClient的send()方法发送请求并获取响应。以下是一个简单示例:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse; public class HttpClientGetExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}

4. 发送POST请求

要使用HttpClient发送POST请求,可以创建一个HttpClient对象,然后创建一个HttpRequest对象并设置请求方法为POST。还需要设置请求体,例如表单数据或JSON数据。最后,使用HttpClient的send()方法发送请求并获取响应。以下是一个简单示例:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets; public class HttpClientPostExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
String postData = "username=user&password=pass";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/login"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(postData))
.build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}

5. 异步请求

HttpClient还支持异步发送HTTP请求。要发送异步请求,可以使用HttpClient的sendAsync()方法。以下是一个简单示例:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse; public class HttpClientAsyncExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}

6. 自定义HttpClient

可以通过HttpClient.Builder类自定义HttpClient,例如设置超时、代理、重定向策略等。以下是一个简单示例,演示如何设置超时和代理:

import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration; public class CustomHttpClientExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.proxy(ProxySelector.of(new InetSocketAddress("myproxy.example.com", 8080)))
.build(); HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}

现在,您已经了解了Java的HttpClient的基本概念和用法。实际上,还有许多其他功能和配置可以探索。在实际项目中,您可能需要根据具体需求调整HttpClient的配置。希望这些示例能帮助您更好地理解Java网络编程中的HttpClient组件。

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

6.4. HttpClient的更多相关文章

  1. HttpClient的替代者 - RestTemplate

    需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...

  2. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  3. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  4. Java的异步HttpClient

    上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...

  5. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  6. C#中HttpClient使用注意:预热与长连接

    最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...

  7. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  8. HttpClient相关

    HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...

  9. Atitit.http httpclient实践java c# .net php attilax总结

    Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...

  10. 使用httpclient发送get或post请求

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

随机推荐

  1. Java面试——TCP与HTTP

    更多内容,移步 IT-BLOG 一.Session 和 Cookie 的区别 [1]Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除:设置了存储时间 ...

  2. MyBatis 源码

    一.准备工作 MyBatis 工作流程:应用程序首先加载 mybatis-config.xml 配置文件,并根据配置文件的内容创建 SqlSessionFactory 对象:然后,通过 SqlSess ...

  3. Spring Data Redis 框架

    系统性学习,移步IT-BLOG 一.简介 对于类似于首页这种每天都有大量的人访问,对数据库造成很大的压力,严重时可能导致瘫痪.解决方法:一种是数据缓存.一种是网页静态化.今天就讨论数据缓存的实现 Re ...

  4. MySQL 更新执行的过程

    更多内容,前往 IT-BLOG Select语句的执行过程会经过连接器.分析器.优化器.执行器.存储引擎,同样的 Update语句也会同样走一遍 Select语句的执行过程. ​ 但是和 Select ...

  5. sqlmap的基本使用

    sqlmap的基本使用 一.注入 1.查询是否存在注入点 sqlmap -u "http://www.xx.com?id=x" --dbs 检测有哪些数据库 --current-d ...

  6. 第三届材料化学与复合材料国际学术会议(MCCM 2022)

    大会官网:http://www.meeting-mccm.org/ 大会时间:2022年12月16-18日 大会地点:中国-珠海 截稿日期:详情见官网(2022年10月14日) 接受/拒稿通知:投稿后 ...

  7. 方差分析2——双因素方差分析(R语言)

    双因素方差分析(Double factor variance analysis) 有两种类型:一个是无交互作用的双因素方差分析,它假定因素A和因素B的效应之间是相互独立的,不存在相互关系:另一个是有交 ...

  8. 技术分享:Proxy-Pool代理池搭建IP代理

    技术分享:Proxy-Pool代理池搭建IP代理 前言本章内容仅供参考,不涉及实际使用,主要使用Python环境和Redis数据库进行环境搭建,工具网盘存储如下,有问题可以私聊我.网址:https:/ ...

  9. 为kubernetes(k8s)单独配置kubectl工具

    介绍 Kubernetes API 是一个 HTTP REST API.这个 API 是真正的 Kubernetes 用户界面,通过它可以完全控制它.这意味着每个 Kubernetes 操作都作为 A ...

  10. 麻了,不要再动不动就BeanUtil.copyProperties!!!

    前言 最近项目上要求升级一个工具包hutool的版本,以解决安全漏洞问题,这不升级还好,一升级反而捅出了更大的篓子,究竟是怎么回事呢? 事件回顾 我们项目原先使用的hutool版本是5.7.2,在代码 ...