在Java中以字符串形式讀取HTTP響應正文
- java
- Spring
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主要包括三個核心類: HttpClient , HttpRequest和HttpResponse 。
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類訪問它。
URL以String獲取響應主體,我們首先應使用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的參數,該參數具有許多子類,包括HttpGet和HttpPost 。
首先創建一個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響應正文。