6.4. HttpClient

打印 上一主题 下一主题

主题 920|帖子 920|积分 2760

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()方法发送请求并获取响应。以下是一个简单示例:
  1. import java.net.URI;
  2. import java.net.http.HttpClient;
  3. import java.net.http.HttpRequest;
  4. import java.net.http.HttpResponse;
  5. public class HttpClientGetExample {
  6.     public static void main(String[] args) {
  7.         try {
  8.             HttpClient client = HttpClient.newHttpClient();
  9.             HttpRequest request = HttpRequest.newBuilder()
  10.                     .uri(URI.create("https://www.example.com/"))
  11.                     .GET()
  12.                     .build();
  13.             HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  14.             System.out.println(response.statusCode());
  15.             System.out.println(response.body());
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20. }
复制代码
4. 发送POST请求
要使用HttpClient发送POST请求,可以创建一个HttpClient对象,然后创建一个HttpRequest对象并设置请求方法为POST。还需要设置请求体,例如表单数据或JSON数据。最后,使用HttpClient的send()方法发送请求并获取响应。以下是一个简单示例:
  1. import java.net.URI;
  2. import java.net.http.HttpClient;
  3. import java.net.http.HttpRequest;
  4. import java.net.http.HttpResponse;
  5. import java.nio.charset.StandardCharsets;
  6. public class HttpClientPostExample {
  7.     public static void main(String[] args) {
  8.         try {
  9.             HttpClient client = HttpClient.newHttpClient();
  10.             String postData = "username=user&password=pass";
  11.             HttpRequest request = HttpRequest.newBuilder()
  12.                     .uri(URI.create("https://www.example.com/login"))
  13.                     .header("Content-Type", "application/x-www-form-urlencoded")
  14.                     .POST(HttpRequest.BodyPublishers.ofString(postData))
  15.                     .build();
  16.             HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  17.             System.out.println(response.statusCode());
  18.             System.out.println(response.body());
  19.         } catch (Exception e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23. }
复制代码
5. 异步请求
HttpClient还支持异步发送HTTP请求。要发送异步请求,可以使用HttpClient的sendAsync()方法。以下是一个简单示例:
  1. import java.net.URI;
  2. import java.net.http.HttpClient;
  3. import java.net.http.HttpRequest;
  4. import java.net.http.HttpResponse;
  5. public class HttpClientAsyncExample {
  6.     public static void main(String[] args) {
  7.         try {
  8.             HttpClient client = HttpClient.newHttpClient();
  9.             HttpRequest request = HttpRequest.newBuilder()
  10.                     .uri(URI.create("https://www.example.com/"))
  11.                     .GET()
  12.                     .build();
  13.             client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
  14.                     .thenApply(HttpResponse::body)
  15.                     .thenAccept(System.out::println)
  16.                     .join();
  17.         } catch (Exception e) {
  18.             e.printStackTrace();
  19.         }
  20.     }
  21. }
复制代码
6. 自定义HttpClient
可以通过HttpClient.Builder类自定义HttpClient,例如设置超时、代理、重定向策略等。以下是一个简单示例,演示如何设置超时和代理:
  1. import java.net.InetSocketAddress;
  2. import java.net.ProxySelector;
  3. import java.net.URI;
  4. import java.net.http.HttpClient;
  5. import java.net.http.HttpRequest;
  6. import java.net.http.HttpResponse;
  7. import java.time.Duration;
  8. public class CustomHttpClientExample {
  9.     public static void main(String[] args) {
  10.         try {
  11.             HttpClient client = HttpClient.newBuilder()
  12.                     .connectTimeout(Duration.ofSeconds(5))
  13.                     .proxy(ProxySelector.of(new InetSocketAddress("myproxy.example.com", 8080)))
  14.                     .build();
  15.             HttpRequest request = HttpRequest.newBuilder()
  16.                     .uri(URI.create("https://www.example.com/"))
  17.                     .GET()
  18.                     .build();
  19.             HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  20.             System.out.println(response.statusCode());
  21.             System.out.println(response.body());
  22.         } catch (Exception e) {
  23.             e.printStackTrace();
  24.         }
  25.     }
  26. }
复制代码
现在,您已经了解了Java的HttpClient的基本概念和用法。实际上,还有许多其他功能和配置可以探索。在实际项目中,您可能需要根据具体需求调整HttpClient的配置。希望这些示例能帮助您更好地理解Java网络编程中的HttpClient组件。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表