在Java中以字符串形式讀取HTTP響應正文

1.簡介

在本教程中,我們將探索幾個庫,用於在Java中將HTTP響應正文作為字符串讀取。從第一個版本開始,Java提供了HttpURLConnection API。這僅包括基本功能,並且眾所周知,它不太友好。

隨著JDK 11的發布,Java引入了經過改進的新HttpClient API來處理HTTP通信。我們將介紹這些庫,並檢查一些替代方法,例如Apache HttpClient和Spring Rest Template。

2. HttpClient

如前所述, HttpClient已添加到Java 11中。它使我們能夠通過網絡訪問資源。但是,與HttpURLConnection不同, HttpClient支持HTTP / 1.1和HTTP / 2 。而且,它提供了同步和異步請求類型

HttpClient提供了具有許多靈活性和強大功能的現代API。該API主要包括三個核心類: HttpClientHttpRequestHttpResponse

HttpResponse描述了HttpRequest調用的結果。 HttpResponse不是直接創建的,當正文被完全接收後才可以使用。

要將響應主體讀取為String,我們首先需要創建簡單的客戶端和請求對象:

HttpClient client = HttpClient.newHttpClient();

 HttpRequest request = HttpRequest.newBuilder()

 .uri(URI.create(DUMMY_URL))

 .build();

然後,我們僅使用BodyHandlers並調用ofString()方法以返迴響應:

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

3. HttpURLConnection

HttpURLConnection是一個輕量級的HTTP客戶端,用於通過HTTP或HTTPS協議訪問資源,並允許我們創建InputStream 。一旦獲得InputStream,我們就可以像讀取普通的本地文件一樣讀取它。

在Java中,可用於訪問Internet的主要類是java.net.URL類和java.net.HttpURLConnection類。首先,我們將使用URL類來指向Web資源。然後,我們可以使用HttpURLConnection類訪問它。

URLString獲取響應主體,我們首先應使用URL創建一個HttpURLConnection

HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();

new URL(DUMMY_URL).openConnection()返回HttpURLConnection 。這個對象允許我們添加標題或檢查響應代碼。

接下來,讓我們connection**對象獲取InputStream**

InputStream inputStream = connection.getInputStream();

最後,我們需要InputStream轉換為String

4. Apache HttpClient

在本節中,我們將看到如何使用Apache HttpClient讀取HTTP響應正文作為字符串。

要使用此庫,我們需要將其依賴項添加到我們的Maven項目中:

<dependency>

 <groupId>org.apache.httpcomponents</groupId>

 <artifactId>httpclient</artifactId>

 <version>4.5.12</version>

 </dependency>

我們可以**CloseableHttpClient類檢索和發送數據**。要使用默認配置創建它的實例,我們可以使用HttpClients.createDefault()

CloseableHttpClient提供了一種execute方法來發送和接收數據。此方法使用類型為HttpUriRequest的參數,該參數具有許多子類,包括HttpGetHttpPost

首先創建一個HttpGet對象

HttpGet request = new HttpGet(DUMMY_URL);

其次,讓我們創建客戶端

CloseableHttpClient client = HttpClients.createDefault();

第三,我們execute方法的結果中檢索響應對象:

CloseableHttpResponse response = client.execute(request);

最後,我們通過**將響應實體轉換為String**來返迴響應主體:

HttpEntity entity = response.getEntity();

 String result = EntityUtils.toString(entity);

5. Spring RestTemplate

在本節中,我們將看到如何使用Spring RestTemplate讀取HTTP響應主體作為字符串。

RestTemplate類是Spring提供的基本工具,它提供了一個簡單的模板,可用於在基礎HTTP客戶端庫(例如JDK HttpURLConnection ,Apache HttpClient等)上進行客戶端HTTP操作。

RestTemplate提供了一些用於創建HTTP請求和處理響應的有用方法。

我們可以通過首先向我們的Maven項目中添加一些依賴項來使用該庫:

<dependency>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-web</artifactId>

 <version>${spring-boot.version}</version>

 </dependency>

 <dependency>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-test</artifactId>

 <version>${spring-boot.version}</version>

 <scope>test</scope>

 </dependency>

要發出Web請求並以字符串形式返迴響應主體,我們首先**創建一個RestTemplate**實例:

RestTemplate restTemplate = new RestTemplate();

其次,我們通過調用方法getForObject() ,傳入URL和所需的響應類型來獲得響應對象-在示例中,我們將使用String.class

String response = restTemplate.getForObject(DUMMY_URL, String.class);

六,結論

在本文中,我們已經看到瞭如何使用多個庫以String讀取HTTP響應正文。