使用okhttp 编写一个接口请求工具:
1.需要下载的包,添加到pom文件中,更新maven即可:
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.10</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
2.新建一个文件,文件名为:requestHttp.java。
3.在requestHttp类下,新建请求方法:
(1)get请求:
public JSONObject getClient( String url ) throws IOException {
//获取自定配置对象 可设置拦截器、超时配置
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(Duration.ofSeconds(500))
.readTimeout(Duration.ofSeconds(200))
.build();
//构造 Request 对象
Request request = new Request.Builder()
.url(url).get()
.addHeader("Content-Type","text/plain")
.build();
// call方法进行请求
Call call = httpClient.newCall(request);
JSONObject results = JSON.parseObject(call.execute().body().string());
// 返回call同步请求返回值
return results;
}
给方法传入请求接口,即可调用get请求:
public static void main(String[] args) throws IOException {
String requestUrl ="http://www.baidu.com";
requestHttp requestHttp = new requestHttp();
Response re = requestHttp.getClient(requestUrl);
}
(2)json传参的post请求:
// post请求
public JSONObject postClientJson( String urls,String bodys) throws IOException {
// 获取配置对象
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(Duration.ofSeconds(500))
.readTimeout(Duration.ofSeconds(200))
.build();
//构造content-type 头
MediaType mediaType = MediaType.Companion.parse("application/json,charset=utf-8");
// 构造请求参数
RequestBody requestBody = RequestBody.Companion.create(bodys,mediaType);
// 构造request 对象
Request request = new Request.Builder()
.url(urls).post(requestBody)
.addHeader("Content-Type","application/json")
// .addHeader("Accept-Encoding","gzip, deflate")
.build();
Call call = httpClient.newCall(request);
JSONObject results = JSON.parseObject(call.execute().body().string());
return results;
}
给方法传入请求接口,即可调用post请求:
public static void main(String[] args) throws IOException {
String requestUrl ="http://*****";
String bodys = "{"a":1,"b":"c"}";
requestHttp requestHttp = new requestHttp();
Response re = requestHttp.postClientJson(requestUrl,bodys);
}
接口请求是接口测试框架设计中重要的步骤,重点是灵活性和可复用性。
其中header信息中会有常用的认证信息,可以通过配置文件读取的方式。
注意事项
*在直接复制代码后有些工具包未引入,直接根据提示引入即可
* 获取接口返回值时,后面不能使用tostring转换,需要使用string()进行转换
* 获取返回值内容乱码,可能是header中“Accept-Encoding” 的格式为gzip, deflate,okhttp无法处理gzip的解压返回不是gzip数据格式了,所以没法解压,解决方案是删除header中的Accept-Encoding
* create方法在okhttp4更换了用法:
MediaType mediaType = MediaType.Companion.parse("application/json,charset=utf-8");
RequestBody requestBody = RequestBody.Companion.create("参数",mediaType);
* 所有请求均使用同步请求的方式,可尝试更换为异步请求