ToB企服应用市场:ToB评测及商务社交产业平台

标题: 6.4. HttpClient [打印本页]

作者: 莫张周刘王    时间: 2023-6-2 18:24
标题: 6.4. HttpClient
1. 什么是HttpClient?
HttpClient是Java 11中引入的一个新特性,用于支持同步和异步发送HTTP请求以及处理HTTP响应。它提供了简单易用的API,使得发送HTTP请求变得非常简单。
2. HttpClient的主要组件
HttpClient由以下几个主要组件组成:
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


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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4