首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓上的HttpClient :通过UMTS/3G的NoHttpResponseException

安卓上的HttpClient :通过UMTS/3G的NoHttpResponseException
EN

Stack Overflow用户
提问于 2010-01-13 04:55:51
回答 3查看 17K关注 0票数 16

我的安卓应用程序使用HttpClient访问部署在Tomcat上的servlet。它安装在我的HTC Magic上。

如果我在连接到Wifi时启动它:它可以工作。如果我在连接到3G (GSM数据网络)时启动它:它不工作,但我的servlet是可访问的。换句话说,我的手机似乎永远得不到响应:

代码语言:javascript
复制
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或让它转储所有内容?

有谁知道发生了什么事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-24 04:06:00

我最终摆脱了这个问题:简单的HTTP头,在路上被squid服务器处理得很糟糕:

预期:100-继续

它似乎默认存在于android SDK上的DefaultHttpClient中。要解决这个问题,只需在您的代码中添加:

代码语言:javascript
复制
  HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);
票数 11
EN

Stack Overflow用户

发布于 2011-02-18 23:51:13

我也遇到了这个问题。它只是偶尔出现,通常是在最初的http请求中。后续请求将工作得很好。添加setUseExpectContinue似乎不起作用。

在我的例子中,解决方案是添加一个重试处理程序,该处理程序将在特定异常时重试请求:

代码语言:javascript
复制
        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);
票数 15
EN

Stack Overflow用户

发布于 2012-12-18 15:31:12

Android有一个bug,HTTPS会进行反向DNS查找(已在Ice Cream三明治中修复)

http://code.google.com/p/android/issues/detail?id=13117提到了一个可以在我的手机上运行的变通方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2052299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档