5.1 創建發送接口的測試類
我們的項目需要有這樣一個類,它能夠實現發送請求,接收響應,驗證響應的功能。 暫時我們只考慮發送 Get 方法的請求。
5.1.1 創建所需變量
在我們的第一個測試類中,我們需要使用 httpClient 來發送請求,接收響應,然後對響應信息做一個驗證。
在我們的項目 src/test/java 目錄下新建一個包名爲:
com.myteest.httpclient.test,在包下新建一個普通類:SimpleGetTest
首先我們考慮需要如下變量:
String url;
CloseableHttpClient httpClient;
CloseableHttpResponse response;
HttpEntity responseBody;
int responseCode;
• url是我們進行get請求的地址;
• client是用來發送http請求的CloseableHttpClient對象的實例;
• response用來存儲我們接收到的響應的CloseableHttpResponse對象的實例;
• responseBody用來存儲響應的主體信息;
• responseCode用來存儲響應的狀態碼;
5.1.2 利用 httpclient 框架編寫代碼實現請求發送和響應接收
接下來實現請求的發送和響應接收。
我們就以網站上的第一個 get 請求爲例,將其網址和 Request 部分複製並連接起 來,形成 URL 如下:
url = "https://reqres.in/api/users?page=2";
接下來用三行代碼來發送請求,接收響應:
//創建一個httpClient的實例
client = HttpClients.createDefault();
//創建一個httpGet請求實例
HttpGet httpGet = new HttpGet(url);
//使用httpClient實例的execute方法發送剛創建的get請求,並用httpResponse將響應接收
response = client.execute(httpGet);
其實到這一步我們的主體工作已經做完了,接下來要對接收到的響應進行一個處理、 分析和驗證。
首先來看下狀態碼如何獲取:
responseCode = response.getStatusLine().getStatusCode();
其次從響應中取得響應主體並轉爲字符串,最後使用 JSON 對象解讀該字符 串,返回一個 JSONOBject 對象,利用該對象獲取指定的鍵值:
// 從響應中提取出響應主體
responseBody = response.getEntity();
//轉爲字符串
String responseBodyString = EntityUtils.toString(responseBody, "utf-8");
// 創建Json對象,把上面字符串序列化成Json對象
JSONObject responseJson = JSON.parseObject(responseBodyString);
// json內容解析
int page = responseJson.getInteger("page");
完整代碼如下:
package com.mytest.httpclient.test;
import java.io.IOException;
import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;
public class SimpleGetTest {
String url;
CloseableHttpClient client;
CloseableHttpResponse response;
HttpEntity responseBody;
int responseCode;
public void sendGet() throws Throwable {
String url = "https://reqres.in/api/users?pages=2";
// 創建一個 httpClient 的實例
client = HttpClients.createDefault();
// 創建一個 httpGet 請求實例
HttpGet httpGet = new HttpGet(url);
try {
// 使用 httpClient 實例發送剛創建的 get 請求,並用httpResponse 將響應接收
response = client.execute(httpGet);
// 從響應中提取出狀態碼
responseCode = response.getStatusLine().getStatusCode();
System.out.println(responseCode);
// 從響應中提取出響應主體
responseBody = response.getEntity();
// 轉爲字符串
String responseBodyString =
EntityUtils.toString(responseBody, "utf-8");
System.out.println(responseBodyString);
EntityUtils.consume(responseBody);
} catch (ClientProtocolException cpe) {
cpe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}finally {
client.close();
response.close();
}
}
public static void main(String[] args) throws Throwable {
SimpleGetTest simpleGetTest = new SimpleGetTest();
simpleGetTest.sendGet();
}
}
未完待續......