本文主要研究一下抛出NoHttpResponseException的调用链
org/apache/http/protocol/HttpRequestExecutor.java
doSendRequest返回null,则执行doReceiveResponse,这里会抛出NoHttpResponseException
org/apache/http/protocol/HttpRequestExecutor.java
这里conn.receiveResponseHeader()会抛出NoHttpResponseException
org/apache/http/impl/DefaultBHttpClientConnection.java
DefaultBHttpClientConnection的receiveResponseHeader方法在执行responseParser.parse()的时候会抛出NoHttpResponseException
org/apache/http/impl/io/AbstractMessageParser.java
AbstractMessageParser的parse方法执行parseHead会抛出NoHttpResponseException
org/apache/http/impl/conn/DefaultHttpResponseParser.java
DefaultHttpResponseParser的parseHead在通过sessionBuffer.readLine(this.lineBuf)读取为-1且count=0时抛出NoHttpResponseException
org/apache/http/protocol/HttpRequestExecutor.java
doSendRequest在request的header指定需要expect且是http1.1的时候才会通过conn.receiveResponseHeader()去接收response,否则response会返回null;这里先conn.sendRequestHeader(request),针对post等执行conn.sendRequestEntity,接着flush把等待发送的数据发送出去
HttpRequestExecutor.execute方法,doSendRequest返回null,则执行doReceiveResponse,这里会抛出NoHttpResponseException;doSendRequest先执行conn.sendRequestHeader(request),针对post等执行conn.sendRequestEntity,接着flush把等待发送的数据发送出去,针对需要expect且是http1.1的这里的response才可能有值。
单纯从HttpRequestExecutor.execute代码上看抛出NoHttpResponseException时,不法断定服务端是否接收到请求
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。