在 Java 中請求 HTTP 客戶端並獲取響應

Sarwan Soomro 2023年1月30日 2022年4月26日
  1. 在 Java 中傳送 HTTP 請求並從客戶端接收 JSON 響應
  2. 在 Java 中非同步執行 HTTP 請求並獲取響應
在 Java 中請求 HTTP 客戶端並獲取響應

我們將使用 Java 中的 HTTP 客戶端來傳送請求和接收響應。同時,你還將學習如何使用主體處理程式、構建器和其他底層方法來傳送 HTTP 客戶端請求。

在 Java 中傳送 HTTP 請求並從客戶端接收 JSON 響應

我們將使用程式設計師用來評估其 HTTP 請求的演示 JSON 網站。這裡是 https://blog.typicode.com/

在此之前,請記下以下對你有幫助的方法。

  1. HttpClient send2client = HttpClient.newHttpClient(); - 我們使用它向客戶端傳送 http 請求並接收響應。
  2. HttpRequest Req2client = HttpRequest(); - 此方法有助於將 http 請求構建為具有以下引數的例項。
    2.1 .newBuilder(); - 生成一個 Http 請求構建器。此方法返回一個構建標準 HTTP 客戶端 API 物件的構建器。
    2.2 .uri("客戶端 URL"); - 設定 http 請求的 URL。
    2.3 .build();- 該引數構建並返回 http 請求。
  3. HttpResponse<String> clientRes = send2client.send(Req2client, HttpResponse.BodyHandlers.ofString()); - 響應狀態碼、響應頭、響應體,以及該響應對應的 HTTP Request 都可以通過這個類訪問。

檢視以下程式,它執行我們到目前為止討論的所有內容。

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Example1 {
	public static void main(String[] args) throws IOException, InterruptedException {
		HttpClient send2client = HttpClient.newHttpClient();
		HttpRequest Req2client = HttpRequest.newBuilder().uri(URI.create("https://blog.typicode.com/")).build();
		String format = System.getProperty("line.separator");
		HttpResponse<String> clientRes = send2client.send(Req2client, HttpResponse.BodyHandlers.ofString());
		System.out.println(" Requested Responses from the client" + format + "1: Status code" + format+ clientRes.statusCode() + format);
		System.out.println("2: Uniform Resource Locator (URL) from the client" + clientRes.uri() + format);
		System.out.println("3: SSL Session" + format + clientRes.sslSession() + format);
		System.out.println("4: HTTP version" + format + clientRes.version() + format);
		//System.out.println("5: Response Header" + format + clientRes.headers() + format);
		//System.out.println("6: Response Body" + format + clientRes.body() + format);

	}
}

輸出:

Requested Responses from the client
1: Status code
200
2: Uniform Resource Locator (URL) from the client: https://blog.typicode.com/
3: SSL Session
Optional[jdk.internal.net.http.common.ImmutableExtendedSSLSession@5bcea91b]
4: HTTP version
HTTP_2
注意
你還可以瞭解更多關於在 Java 中實現 HTTP Post

在 Java 中非同步執行 HTTP 請求並獲取響應

我們將在以下程式碼塊中使用相同的 HttpRequest 方法,但具有以下功能。

sendAsync() - 此客戶端使用指定的響應正文處理程式非同步傳送指定的請求。

sendAsync()HttpRequest 是傳送和檢索方法。兩者對於 HTTP Web 處理程式都是安全的。

語法:

Cli.sendAsync(RQI, BodyHandlers.ofString())
    .thenApply(HttpResponse::body) //optional
	.thenAccept(System.out::println) //The action to take before completing the retrieved  completion stage 
	.join(); //returts the response value
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;

public class Example2 {
	public static void main(String[] args) {
		HttpClient Cli = HttpClient.newHttpClient();
		   HttpRequest RQI = HttpRequest.newBuilder()
		         .uri(URI.create("https://www.delftstack.com"))
		         .build();
		   Cli.sendAsync(RQI, BodyHandlers.ofString())
		         .thenApply(HttpResponse::body)
		         .thenAccept(System.out::println)
		         .join();
	}
}

輸出:

執行 http 請求並非同步獲取響應

Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn

相關文章 - Java HTTP