为什么我用httpclient的时候,经常出现ProtocolException,Connection ,IOException错误!!!

lgmsyy 2014-02-14 01:14:12
大概错误:
org.apache.commons.httpclient.ProtocolException: Unable to parse header: 0
java.lang.IllegalStateException: Connection is not open
java.io.IOException: Stream closed

详细错误:
org.apache.commons.httpclient.ProtocolException: Unable to parse header: 0
at org.apache.commons.httpclient.HttpParser.parseHeaders(HttpParser.java:202)
at org.apache.commons.httpclient.HttpMethodBase.readResponseHeaders(HttpMethodBase.java:1935)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1737)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at com.pcd.ssoclient.FilterSSOClient.checkSession(FilterSSOClient.java:138)
at com.pcd.ssoclient.FilterSSOClient.doFilter(FilterSSOClient.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
java.lang.IllegalStateException: Connection is not open
at org.apache.commons.httpclient.HttpConnection.assertOpen(HttpConnection.java:1277)
at org.apache.commons.httpclient.HttpConnection.write(HttpConnection.java:974)
at org.apache.commons.httpclient.HttpConnection.write(HttpConnection.java:943)
at org.apache.commons.httpclient.HttpConnection.print(HttpConnection.java:1033)
at org.apache.commons.httpclient.HttpMethodBase.writeRequestLine(HttpMethodBase.java:2218)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2059)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at com.pcd.ssoclient.FilterSSOClient.logout(FilterSSOClient.java:180)
at com.pcd.ssoclient.FilterSSOClient.doFilter(FilterSSOClient.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at com.pcd.ssoclient.FilterSSOClient.checkSession(FilterSSOClient.java:138)
at com.pcd.ssoclient.FilterSSOClient.doFilter(FilterSSOClient.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
...全文
6390 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MC1994 2016-11-08
  • 打赏
  • 举报
回复
由于前几天遇到了这个问题,简单说一下,希望可以帮到其他人。 我遇到这个问题主要排查了几个点, 第一,传入流有没有关闭,推荐使用这个方法, InputStream fi = entity.getContent(); EntityUtils.consumeQuietly(entity); org.apache.http.util.EntityUtils这个类定义的consumeQuietly方法可以很好的关闭entity,如果不关闭,有可能发生占用httpClient资源的情况,出现上述异常。 第二点,关于长连接还是短连接的问题,我遇到这个问题排查了好久,但是一直无法还原场景,原因是我的测试环境没有加代理,而生产环境加了nginx的代理,在这个环境下,如果你是下载文件或者是其他流长度比较大的情况,就不适用长连接了,因为占用时间比较长,其他请求得不到资源,就在客户端内报出上述异常,具体情况可以研究一下nginx对于长短连接的处理方式。 希望可以帮到!
劉胡來 2015-03-24
  • 打赏
  • 举报
回复
我想知道这是什么异常,,服务器不开会出现这种异常不
睿音 2014-02-25
  • 打赏
  • 举报
回复
引用 2 楼 lgmsyy 的回复:
[quote=引用 1 楼 pizzame 的回复:] 根据链接方式,有2种方式: 1、若是长连接方式,最大的可能是网络断掉引起的IO流关闭,可以换个网络环境再测试下,若不是再去排查代码的问题。 2、若是短链接方式,首先排查代码,是否多次关闭IO流(主要排查是否在try...finally...中合理的处理了流关闭)。第二发送或接收时是否从队列或者上下文中获取到的IO流是已关闭的,这点也可能是普遍常见的问题。 一般情况下这种问题都可以通过调试排查问题,由于可能性很多。我只列举了几种常见的情况。
你好,现在我的解决办法是每次请求都new httpclient一次。[/quote] 每次new httpclient确实有优化的余地,但也不会有很大的差距。业务能正常跑起来才是正道。
lgmsyy 2014-02-14
  • 打赏
  • 举报
回复
引用 1 楼 pizzame 的回复:
根据链接方式,有2种方式: 1、若是长连接方式,最大的可能是网络断掉引起的IO流关闭,可以换个网络环境再测试下,若不是再去排查代码的问题。 2、若是短链接方式,首先排查代码,是否多次关闭IO流(主要排查是否在try...finally...中合理的处理了流关闭)。第二发送或接收时是否从队列或者上下文中获取到的IO流是已关闭的,这点也可能是普遍常见的问题。 一般情况下这种问题都可以通过调试排查问题,由于可能性很多。我只列举了几种常见的情况。
你好,现在我的解决办法是每次请求都new httpclient一次。
睿音 2014-02-14
  • 打赏
  • 举报
回复
根据链接方式,有2种方式: 1、若是长连接方式,最大的可能是网络断掉引起的IO流关闭,可以换个网络环境再测试下,若不是再去排查代码的问题。 2、若是短链接方式,首先排查代码,是否多次关闭IO流(主要排查是否在try...finally...中合理的处理了流关闭)。第二发送或接收时是否从队列或者上下文中获取到的IO流是已关闭的,这点也可能是普遍常见的问题。 一般情况下这种问题都可以通过调试排查问题,由于可能性很多。我只列举了几种常见的情况。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧