gpt4 book ai didi

android - Android上的HttpClient : NoHttpResponseException root cause In my project,是吧?

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:03 25 4
gpt4 key购买 nike

我使用 DefaultHttpClient 从服务器获取数据,但偶尔会出现 NoHttpResponseException。

我引用了这篇文章 a link , 和

HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);

不适合我。

我使用 HttpRequestRetryHandler 来避免这个问题,并且它有效,但我认为这不是一个完美的方法,因为网络数据包被 tcpdump 转储到服务器端。

我发现当NoHttpResponseException发生时,连接服务器时使用的是新端口,而不是本次请求之前使用的旧端口(HttpClient不会重用旧连接)。但是当从客户端连接到服务器端的新端口时,我没有找到任何 tcp 3 次握手数据包。但是根据tcp理论,握手是建立新连接的必经步骤。

不知道是不是android的bug(我用的是android 2.3测试),有大神知道吗?提前致谢。

最佳答案

我建议您检查您的 HttpClient 版本,即使它使用得更广泛,android 团队不维护 android 上的 HttpClient。您可能正在运行旧版本。以下是步骤:

  1. 确保获得最新版本 - http://hc.apache.org/downloads.cgi
  2. 将 httpcomponents-client-4.2.1-bin 解压缩到您工作区中一个方便的目录
  3. 创建一个名为“Apache HttpClient 4.2.1”的用户库并链接到 .jar 文件(如果需要,也可以附上源文档)并在库的订购和导出页面上选择导出。
  4. 将库链接到您的项目。


此外,请检查您的连接参数设置。根据 apache 文档(请参阅 http://hc.apache.org/httpclient-3.x/performance.html),建议打开 UseExpectContinue 以提高性能。如果您使用的是 HTTP_1_0 或更低版本,这可能会给您带来问题。

这些设置对我有用(注意 HTTP_1_1 的使用,而且您的超时可能与我的不同):

        HttpParams params = new BasicHttpParams();

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);

HttpConnectionParams.setStaleCheckingEnabled(params, false);
HttpConnectionParams.setConnectionTimeout(params, 13000);
HttpConnectionParams.setSoTimeout(params, 30000);
HttpConnectionParams.setSocketBufferSize(params, 8192);

关于android - Android上的HttpClient : NoHttpResponseException root cause In my project,是吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com