2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpclient用了连接池方式,作为一个静态变量处理,请求头和响应头以及cookies设置都有了相关处理方法,本来这个方法已经快超过100行了,解耦之后分成了几个小方法,方便修改和调试。分两部分,一部分是框架,只做了公共处理,另外一部分是每个项目的base类需要重新实现一些这个方法来处理header信息以及需要特殊处理的地方。分享代码如下:
/*** 获取响应实体
*
*@paramrequest 请求对象
*@return返回json类型的对象*/
protected staticJSONObject getHttpResponse(HttpRequestBase request) {
beforeRequest(request);
JSONObject jsonObject= newJSONObject();
RequestInfo requestInfo= newRequestInfo(request);
CloseableHttpResponse response= null;//创建响应对象
Date start = getDate();//记录开始时间
try{
response=ClientManage.httpsClient.execute(request);
}catch(Exception e) {new Thread(() -> new AlertOver("接口请求失败", requestInfo.toString() +Arrays.toString(e.getStackTrace()), requestInfo.getUrl()).sendSystemMessage()).start();returnjsonObject;
}
Date end= getDate();//记录结束时间
double elapsed_time = getTimeDiffer(start, end);//获取响应耗时
afterResponse(response);int status = response.getStatusLine().getStatusCode();//获取响应状态
String content =getContent(response);long data_size =content.length();
jsonObject=getResponse(content);int code =checkCode(jsonObject, requestInfo.getUrl());if (status !=HttpStatus.SC_OK)new Thread(() -> new AlertOver("响应状态码错误", "状态码错误:" +status, requestInfo.getUrl()).sendSystemMessage());
MySqlTest.saveApiTestDate(requestInfo, data_size, elapsed_time, status, getMark(), code, LOCAL_IP, COMPUTER_USER_NAME);returnjsonObject;
}
下面是里面封装方法的依次分享:
/*** 发送请求之前,配置请求管理器,设置IP,user_agent和cookie
*
*@paramrequest*/
private static voidbeforeRequest(HttpRequestBase request) {
request.setConfig(requestConfig);//设置请求配置
request.addHeader(getHeader("X-FORWARDED-FOR", getRandomIP()));//随机生成ip
request.addHeader(HTTP.USER_AGENT, USER_AGENT);if (cookies != null && !Arrays.toString(request.getAllHeaders()).contains(REQUEST_HEADER_COOKIE))
request.addHeader(REQUEST_HEADER_COOKIE, cookies);//添加cookie
}
requestinfo类的方法:
packagecom.fission.source.httpclient;importcom.fission.source.source.SourceCode;importlombok.Data;importorg.apache.http.HttpEntity;importorg.apache.http.ParseException;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.client.methods.HttpRequestBase;importorg.apache.http.util.EntityUtils;importjava.io.IOException;/*** 请求信息封装类*/@Datapublic class RequestInfo extendsSourceCode {/*** 接口地址*/String apiName;/*** 请求的url*/String url;/*** 请求的uri*/String uri;/*** 方法,get/post*/String method;/*** 域名*/String host;/*** 协议类型*/String type;/*** 参数*/String params;/*** 通过request获取请求的相关信息,并输出部分信息
*
*@para