Using getResponseBodyAsStream instead is recommended

在用httpClient时,tomcat的控制台报出以下警告。

2018-09-17 14:25:01,447  WARN (org.apache.commons.httpclient.HttpMethodBase:682) - Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.

查看代码,在用httpclient做请求时,用的是String respStr = method.getResponseBodyAsString()

查看getResponseBodyAsString()源代码

报WARN的条件是((contentLength == -1) || (contentLength> limit)),也就是说,或者是返回的HTTP头没有指定contentLength,或者是contentLength大于上限(默认是1M)。如果能确定返回结果的大小对程序没有显著影响,这个WARN就可以忽略,可以在日志的配置中把HttpClient的日志级别调到ERROR,不让它报出来。

 

当然,这个警告也是有意义的,HttpClient建议使用InputStream getResponseBodyAsStream()代替byte[]getResponseBody()。对于返回结果很大或无法预知的情况,就需要使用InputStreamgetResponseBodyAsStream(),避免byte[] getResponseBody()可能带来的内存的耗尽问题。 部署到tomcat之后,tomcat和redis多次挂掉。原因就是内存耗尽。

如果返回的头信息没有指定长度或长度大于1M则抛出如上异常。
则需把 getResponseBodyAsString()换成 getResponseBodyAsStream()即可

HttpClient client=new HttpClient();

GetMethod method=new GetMethod(URL);

PostMethod method = new PostMethod(URL);

client.executeMethod(method);

InputStream inputStream = method.getResponseBodyAsStream();  

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));  

StringBuffer stringBuffer = new StringBuffer();  

String str= "";  

while((str = br.readLine()) != null){  

    stringBuffer.append(str);  

 }

String  respStr = stringBuffer.toString();

这样就可以对返回的字符串respStr进行进一步解析了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值