方法 newBuilder(), build()
HttpRequest類用來描述一個http-request,從名字就很容易理解。這個對象本身什麼都不做,它只是包含有關 http 請求的各種信息。因此,正如您可能已經猜到的那樣,Builder 模板也用於創建它。
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
在調用方法newBuilder()和build()之間,您需要調用所有方法來構造對象HTTP請求.
一個簡單請求的示例如下所示:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(“http://codegym.cc”))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
您可以在官方文檔的鏈接中找到HttpRequest類的所有方法。
然後我們將分析其中最受歡迎的。
uri() 方法
使用uri()方法,您可以設置 http 請求將發送到的 URI(或 URL)。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
順便說一下,您可以通過將 URI 直接傳遞給newBuilder()方法來縮短這段代碼:
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
重要的!可以通過兩種方式創建 URI:
- newURI(字符串)
- URI.create(字符串)
第二種方式更可取。不幸的是,第一種方法不是很好,因為 URI 構造函數被聲明為public URI(String str) throws URISyntaxException,而URISyntaxException是一個已檢查的異常。
方法 GET()、POST()、PUT()、DELETE()
您可以使用以下方法設置 http 請求方法:
- 得到()
- 郵政()
- 放()
- 刪除()
這是一個簡單的 GET 請求的樣子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
版本() 方法
您還可以設置 HTTP 協議版本。只有2個選項:
- HttpClient.版本.HTTP_1_1
- HttpClient.版本.HTTP_2
假設您想使用 HTTP/2 協議創建請求,那麼您需要編寫:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
很簡單,不是嗎?:)
超時() 方法
您還可以設置查詢執行時間。如果它通過並且請求從未完成,將拋出HttpTimeoutException。
時間本身是使用對象設置的期間來自 Java 日期時間 API。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
此方法的存在表明HttpClient和HttpRequest類可以執行各種任務。想像一下,您正在執行一個請求,網絡發生了一些事情並且持續了 30 秒。立即接收到異常並正確地做出反應要有用得多。
標頭() 方法
您還可以向任何請求添加任意數量的標頭。而且它和其他任何事情一樣容易做。為此有一個特殊的方法 - header()。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
還有另一種方法可以一次設置多個標頭。例如,如果您將標題列表轉換為數組,它可能會派上用場:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
基本的一切都很簡單。
GO TO FULL VERSION