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