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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |