httpclient封装获取响应实体_httpclient获取响应实体和信息的封装方法(解耦更新)...

这篇博客介绍了如何对HTTPClient进行封装,以获取响应实体,同时进行了解耦处理,包括连接池管理、请求头和响应头的设置。更新后的代码分为框架部分和项目特定部分,提高了可维护性和调试性。博客还分享了相关封装方法,如设置IP、User-Agent、Cookie等,并提供了获取响应耗时、状态码、内容等信息的代码示例。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值