我有我的Android应用程序使用HttpClient来访问部署在我的Tomcat上的servlet.它安装在我的HTC Magic上.
如果我在Wifi连接时启动它:它可以工作.如果我在连接到3G(GSM数据网络)时启动它:它不起作用但是我的servlet已到达.换句话说,似乎我的手机永远不会得到回复:
Technical problem while receiving response.
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
Run Code Online (Sandbox Code Playgroud)
如果我通过3G使用Web浏览器激活与我的servlet一起打包的测试HTML页面,它会成功到达同一个servlet(页面接收响应).
我如何调试HttpClient或要求它转储所有内容?
有人知道发生了什么吗?
P. *_*etz 15
我也遇到过这个问题.它只是偶尔发生,通常是在初始的http请求中.后续请求可以正常工作.添加setUseExpectContinue似乎不起作用.
我的解决方案是添加一个重试处理程序,它将在特定的异常上重试请求:
HttpProtocolParams.setUseExpectContinue(client.getParams(), false);
HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount,
HttpContext context) {
// retry a max of 5 times
if(executionCount >= 5){
return false;
}
if(exception instanceof NoHttpResponseException){
return true;
} else if (exception instanceof ClientProtocolException){
return true;
}
return false;
}
};
client.setHttpRequestRetryHandler(retryHandler);
Run Code Online (Sandbox Code Playgroud)
Hub*_*ert 11
我终于摆脱了这个问题:简单的一个HTTP标头,在路上被鱿鱼服务器严重处理:
期待:100-继续
默认情况下,android SDK上的DefaultHttpClient似乎存在.要解决这个问题,只需在代码中添加:
HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16836 次 |
| 最近记录: |