「原创声明:保留所有权利,禁止转载」
本人在使用 httpclient 做接口测试的时候,最近程序偶然报 socket closed 错误,上周经过排查发现是 request.releaseConnection() 这个方法搞得鬼,也是自己学艺不精,没有真正理解方法的含义,改掉之后其他接口就没有出现过这个问题,今天又遇到了,又重新排查了自己的方法,发现还有一种导致 socket closed 的原因,因为我的响应对象创建时用的是 CloseableHttpResponse 类,所以需要关闭,在某些时候 response 太大可能导致使用 EntityUtils.toString(entity) 解析实体的时候出错,个人理解是由于 response 的并未完全解析到 entity 里面时已经执行了 close() 方法导致的,试着把 close() 方法后置,完美解决问题。
下面是我的错误代码片段:
try {
response.close();
} catch (IOException e2) {
output("响应关闭失败!", e2);
}
data_size = entity.getContentLength();// 获取相应数据大小
if (data_size == -1) {// 如果为-1,则重置data_size
data_size = 0;
}
String content = null;
try {
content = EntityUtils.toString(entity);// 用string接收响应实体
EntityUtils.consume(entity);// 消耗响应实体
} catch (ParseException e1) {
output("解析响应实体异常!", e1);
} catch (IOException e1) {
output("解析响应实体时java IO 异常!", e1);
} // 解析响应
下面是修改之后的代码片段:
String content = null;
try {
content = EntityUtils.toString(entity);// 用string接收响应实体
EntityUtils.consume(entity);// 消耗响应实体
} catch (ParseException e1) {
output("解析响应实体异常!", e1);
} catch (IOException e1) {
output("解析响应实体时java IO 异常!", e1);
} // 解析响应
try {
response.close();
} catch (IOException e2) {
output("响应关闭失败!", e2);
}
技术类文章精选
- java 一行代码打印心形
- Linux 性能监控软件 netdata 中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 如何测试概率型业务接口
- httpclient 处理多用户同时在线
- 将 swagger 文档自动变成测试代码
- 五行代码构建静态博客
- httpclient 如何处理 302 重定向
- 基于 java 的直线型接口测试框架初探
非技术文章精选
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。