问题解决:使用HttpClient出现java.io.IOException: Attempted read from closed stream

在我这篇文章中《如何java实现调用外部接口(POST请求)》,曾报出这个错误,发现是因为EntityUtils.toString(HttpEntity)方法中操作的是流数据,流数据是一次性数据,所以同一个HttpEntity不能使用多次该方法

解决方案:先用EntityUtils.toByteArray(HttpEntity)获取到字节数组,然后转字符串,最后转json。例子如下:

byte[] byteArray = EntityUtils.toByteArray(res.getEntity());
JSONObject 	response = JSONObject.fromObject(new String(byteArray, "utf-8"));// 防止返回结果中文乱码

// 转成JSONObject 后就可以通过get方法拿到参数值
String message = (String) response.get("message");
{
    "id": "xxx", // 上报成功时id才有数据
    "code": "xxx", // 0代表上报成功,其他代表错误
    "message": "xxx" // 无论如何都有数据
}

参考文章:
《使用HttpClient出现java.io.IOException: Attempted read from closed stream》

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值