Java如何使用HttpClient读取网站内容?
HTTP客户端API可用于通过网络请求HTTP资源。这个新API是作为Java11中的一个新API引入的。它支持HTTP/1.1和HTTP/2,还支持同步和异步编程模型。下面的代码片段向您展示了如何使用新的API来读取网站页面的内容。
在下面的代码中,我们首先使用newHttpClient()静态方法创建一个新的HttpClient实例。这相当于调用newBuilder().build()。这为我们提供了一个HttpClient实例,其中包含默认设置,比如使用“GET”请求方法作为默认设置。然后我们使用newBuilder()方法创建一个HttpRequest对象,设置请求URI并调用build()方法来构建HttpRequest对象。
接下来,我们通过调用HttpClient对象的send()方法来发送请求。这将发送给定的请求,必要时阻塞以获得响应。返回的HttpResponse对象包含由给定响应主体处理程序处理的响应状态、头和主体。
package org.nhooo.example.httpclient; 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 ReadWebsiteContent { public static void main(String[] args) throws Exception { // 使用默认配置创建HttpClient对象。 HttpClient httpClient = HttpClient.newHttpClient(); // 创建HttpRequest对象并设置要请求的URI, // 未定义时,默认请求方法是GET请求。 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://httpie.org/hello")) .GET() .build(); // 发送请求并打印出返回的响应。 HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); System.out.println("Status Code: " + response.statusCode()); System.out.println("Headers : " + response.headers().toString()); System.out.println("Body : " + response.body()); } }
这是我们使用上面的代码片段阅读的网站内容:
Status Code: 200 Headers : java.net.http.HttpHeaders@2d299ad6 { {:status=[200], cf-cache-status=[DYNAMIC], cf-ray=[5875b78d5df2eb00-LAX], cf-request-id=[023d710c5b0000eb00b738f200000001], content-length=[116], content-type=[text/x-rst;charset=utf-8], date=[Tue, 21 Apr 2020 08:25:53 GMT], etag=["234b9a1fe19f125356a5396c8cc72d54493a2eef"], expect-ct=[max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"], server=[cloudflare], set-cookie=[__cfduid=d5bdb6d828be3bb85d0f1f4c2ff81041c1587457553; expires=Thu, 21-May-20 08:25:53 GMT; path=/; domain=.httpie.org; HttpOnly; SameSite=Lax]} } Body : Hello, World!