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();
}
}
未完待续......