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. StyleGAN 生成 AI 虚拟人脸,再也不怕侵犯肖像权

    目录 什么是 StyleGAN 如何使用 StyleGAN 下载项目 修改项目 MSVC 运行项目 运行结果 什么是 StyleGAN GAN 是机器学习中的生成性对抗网络,目标是合成与真实图像无法区 ...

  2. 深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析

    深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析 在本篇文章当中主要给大家深入介绍一下在 cpython 当中字典的实现原理,在本篇文章当中主要介绍在早期 python3 当中的版 ...

  3. Host key verification failed的问题解决 (亲测有效)

                一.描述 scp拷贝远程内容时失败,出现以下问题: 翻译: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  4. 简单的cs修改器

    目录 各个函数解析 main() GetPid() 无限子弹 无限血 无限金币 Patch() 无僵直 稳定射击 Depatch1 手枪连发 Depatch 源代码部分 各个函数解析 这是我根据b站上 ...

  5. Redis 日志showlog 和 管道pileline

    redis日志 slowlog-log-slower-than:指定执行时间超过多少微秒(1秒等于1000000微秒) 的命令请求会被记录到日志上 slowlog-max-len:指定服务器最多保存多 ...

  6. 用CMD或者bat修改host文件

    第一行代码标识 取消host的只读属性 第二行写入 attrib -R C:\WINDOWS\system32\drivers\etc\hosts @echo 127.0.0.1 baidu.com ...

  7. selenium部分知识点总结

    selenium部分总结 最近写了一个selenium自动化脚本. 基于此总结一些常用的代码 1. 用户输入换行符不终止输入 strings = '' s = input('请输入:(q停止输入)') ...

  8. 27-lazy loading(懒加载和预加载)

    懒加载 document.getElementById('btn').onclick = function () { // 懒加载:当文件需要使用时才加载 import(/* webpackChunk ...

  9. [aac @ 0x1dd24c0] Input contains NaN/+-Inf

    ffmpeg编码pcm为aac时报错:[aac @ 0x1dd24c0] Input contains NaN/+-Inf 在./configure选项后面加上下列选项就可以 --enable-enc ...

  10. 本地socket通讯

    本地socket通讯        虽然学过网络socket,但是对于本地socket通讯却不是很熟悉,刚在项目中看到,所以在网上找了一篇介绍的比较详细的,mark下!!!        socket ...