我的安卓应用程序使用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)如果我通过3G使用web浏览器激活与servlet打包在一起的测试HTML页面,它将成功到达同一个servlet (页面收到响应)。
我如何调试HttpClient或让它转储所有内容?
有谁知道发生了什么事吗?
发布于 2010-01-24 04:06:00
我最终摆脱了这个问题:简单的HTTP头,在路上被squid服务器处理得很糟糕:
预期:100-继续
它似乎默认存在于android SDK上的DefaultHttpClient中。要解决这个问题,只需在您的代码中添加:
HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);发布于 2011-02-18 23:51:13
我也遇到了这个问题。它只是偶尔出现,通常是在最初的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);发布于 2012-12-18 15:31:12
Android有一个bug,HTTPS会进行反向DNS查找(已在Ice Cream三明治中修复)
http://code.google.com/p/android/issues/detail?id=13117提到了一个可以在我的手机上运行的变通方法。
https://stackoverflow.com/questions/2052299
复制相似问题