<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 11 HTTP 客戶端示例 > 原文: [https://javatutorial.net/java-11-http-client-example](https://javatutorial.net/java-11-http-client-example) Java 11 引入了 HTTP 客戶端,該客戶端可用于通過網絡發送請求并檢索其響應。 HTTP 客戶端取代了舊的`HttpUrlConnection`類,并且不支持易用性。 HTTP 客戶端 API 同時支持 HTTP/1.1 和 HTTP/2。 ![java-featured-image](https://img.kancloud.cn/05/3e/053ee0bb59842d92359246c98f815e0c_780x330.jpg) `HttpClient`也是不可變的,這意味著它可以用于發送多個請求。 每個`HttpRequest`必須提供一個[`BodyHandler`](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.BodyHandler.html),并且其(`BodyHandler`)函數用于確定如何處理響應(如果有的話)。 可以同步或異步發送請求 * [`send(HttpRequest, BodyHandler)`](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html#send(java.net.http.HttpRequest,java.net.http.HttpResponse.BodyHandler))阻塞,直到發送了請求并接收到響應為止 * [`sendAsync(HttpRequest, BodyHandler)`](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html#sendAsync(java.net.http.HttpRequest,java.net.http.HttpResponse.BodyHandler))發送請求并同時接收響應(異步)。 此方法返回[`CompletableFuture`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html),僅當響應可用時才完成。 ![HTTP Client, java example](https://img.kancloud.cn/2f/c5/2fc59f13967c83d3cdd6ee7965f912de_761x211.jpg) `HttpResponse.BodyHandler` * 允許在收到實際的響應主體之前檢查響應代碼 `HttpResponse.BodyHandlers` 存在`BodyHandlers`的唯一目的是處理響應主體類型。 一些例子: * `BodyHandlers.ofByteArray()` * `BodyHandlers.ofString()` * `BodyHandlers.ofFile()` * `BodyHandlers.ofInputStream()` * 等等 ## 數據作為響應流 * `HttpClient`實際上是請求正文的訂閱者和響應正文字節的發布者 * 請求和響應主體作為響應流(具有無阻塞背壓的數據流)公開 `HttpRequest.BodyPublisher` * 將 Java 對象轉換為適合作為請求正文發送的字節緩沖區 `HttpRequest.BodyPublishers` * `BodyPublishers::ofByteArray(byte[])` * `BodyPublishers::ofFIle(Path)` * `BodyPublishers::ofString(String)` * 等等 `HttpRequest.BodySubscriber` * 使用響應主體字節并將其轉換為 Java 類型 順便說一句,讓我們看看一些實現。 首先,我們將發送 GET 請求: ```java HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://javatutorial.net/")) .build(); ``` 現在,讓我們發送一個 HTTP 請求。 我將向您展示同步和異步示例: ## 同步(在`HttpResponse`可用之前將一直阻塞)GET ```java HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpClient.newBuilder() .uri(URI.create("https://javatutorial.net/") .version(Version.HTTP_1_1) .connectTimeout(Duration.ofSeconds(20)) .authenticator(Authenticator.getDefault()) .build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); ``` ## 異步 GET ```java HttpClient?client?=?HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://javatutorial.net/")) .connectTimeout(Duration.ofSeconds(20)) .build(); client.sendAsync(request, BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println); ``` ## POST ```java HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://javatutorial.net/")) .POST(BodyPublishers.ofString(data)) .build(); HttpResponse<?> response = client.send(request, discarding()); ``` ## 總結 HTTP 客戶端的角色是替換`URLConnection` API,并且在 Java 11 中作為 Java SE 平臺的一部分進行了標準化,并且位于`java.net.http`包中。 一個主要優點是它使用了現代 Java 語言以及 API 功能。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看