前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用httpclient中EntityUtils类解析entity遇到socket closed错误的原因

使用httpclient中EntityUtils类解析entity遇到socket closed错误的原因

作者头像
FunTester
发布2019-09-10 11:20:36
1.9K0
发布2019-09-10 11:20:36
举报
文章被收录于专栏:FunTesterFunTester

本人在使用httpclient做接口测试的时候,最近程序偶然报socket closed错误,上周经过排查发现是request.releaseConnection()这个方法搞得鬼,也是自己学艺不精,没有真正理解方法的含义,改掉之后其他接口就没有出现过这个问题,今天又遇到了,又重新排查了自己的方法,发现还有一种导致socket closed的原因,因为我的响应对象创建时用的是CloseableHttpResponse类,所以需要关闭,在某些时候response太大可能导致使用EntityUtils.toString(entity)解析实体的时候出错,个人理解是由于response的并未完全解析到entity里面时已经执行了close()方法导致的,试着把close()方法后置,完美解决问题。

下面是我的错误代码片段:

代码语言:javascript
复制
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);
        } // 解析响应

下面是修改之后的代码片段:

代码语言:javascript
复制
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);
        }

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档