org.apache.http.client.ClientProtocolException抛出错误,怎么解决啊?

logohoo 2015-06-19 12:06:06
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false);
HttpPost httpPost=new HttpPost(url);
try
{
if(nvps.size()>0){httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));}
HttpResponse response=httpClient.execute(httpPost);
if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK)//判断是否正确执行
{
//获取到网络请求回来的输入流;
returnString=EntityUtils.toString(response.getEntity());//InputStream is=response.getEntity().getContent();
}
}
catch (Exception e)
{
e.printStackTrace();
}

上面代码执行老是抛出下面错误:
06-18 23:54:39.045 6017-6131/com.logohoo.manstore.app W/System.err﹕ org.apache.http.client.ClientProtocolException
06-18 23:54:39.045 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:585)
06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:506)
06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:484)
06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at com.logohoo.manstore.app.HttpAdapter.postStringForm(HttpAdapter.java:78)
06-18 23:54:39.065 6017-6131/com.logohoo.manstore.app W/System.err﹕ at com.logohoo.manstore.app.LoginActivity$2.run(LoginActivity.java:66)
请问怎么解决?问题在哪里?
...全文
16249 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MC1994 2016-11-08
  • 打赏
  • 举报
回复
由于前几天遇到了这个问题,简单说一下,希望可以帮到其他人。 我遇到这个问题主要排查了几个点, 第一,传入流有没有关闭,推荐使用这个方法, InputStream fi = entity.getContent(); EntityUtils.consumeQuietly(entity); org.apache.http.util.EntityUtils这个类定义的consumeQuietly方法可以很好的关闭entity,如果不关闭,有可能发生占用httpClient资源的情况,出现上述异常。 第二点,关于长连接还是短连接的问题,我遇到这个问题排查了好久,但是一直无法还原场景,原因是我的测试环境没有加代理,而生产环境加了nginx的代理,在这个环境下,如果你是下载文件或者是其他流长度比较大的情况,就不适用长连接了,因为占用时间比较长,其他请求得不到资源,就在客户端内报出上述异常,具体情况可以研究一下nginx对于长短连接的处理方式。 希望可以帮到!
梦zh 2016-03-30
  • 打赏
  • 举报
回复
请问怎么解决的?
logohoo 2015-06-19
  • 打赏
  • 举报
回复
浏览器没有问题,应该 是httppost构造的有问题了,但应该怎么构造呢?能给个例子吗?
Hare_ 2015-06-19
  • 打赏
  • 举报
回复
1,先在浏览器测试下地址看能否访问, 2,1如果没问题的话就是你httppost构造的有问题了
logohoo 2015-06-19
  • 打赏
  • 举报
回复
at com.logohoo.manstore.app.LoginActivity$2.run(LoginActivity.java:66) 是调用 at com.logohoo.manstore.app.HttpAdapter.postStringForm(HttpAdapter.java:78) 再调用下面代码函数 DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false); HttpPost httpPost=new HttpPost(url); try { if(nvps.size()>0){httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));} HttpResponse response=httpClient.execute(httpPost); if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK)//判断是否正确执行 { //获取到网络请求回来的输入流; returnString=EntityUtils.toString(response.getEntity());//InputStream is=response.getEntity().getContent(); } } catch (Exception e) { e.printStackTrace(); } 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、问题在哪里? 这个是直接访问网页url,是不是要headers headers.put("Accept", "*/*"); headers.put("Accept-Encoding", "gzip, deflate"); headers.put("Accept-Language", "zh-cn"); headers.put("Connection", "Keep-Alive"); 但我加了还是这样效果。无法解决
logohoo 2015-06-19
  • 打赏
  • 举报
回复
就是这一句: HttpResponse response=httpClient.execute(httpPost); 这是怎么回事啊?
tony4geek 2015-06-19
  • 打赏
  • 举报
回复
at com.logohoo.manstore.app.LoginActivity$2.run(LoginActivity.java:66)
Hare_ 2015-06-19
  • 打赏
  • 举报
回复
LoginActivity.java:66 这行是什么内容
logohoo 2015-06-19
  • 打赏
  • 举报
回复
我知道上面必须用HttpGet 而不是HttpPost,但是用HttpGet 也是一样错误啊。 我是4.4.4 实机,调试的结果。
logohoo 2015-06-19
  • 打赏
  • 举报
回复
看了http://blog.csdn.net/wangpeng047/article/details/19624529 跟我代码看不错哪里问题,我的构造如下,麻烦帮忙看下 httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 3000); DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS,true); HttpPost httpPost=new HttpPost("http://bbs.csdn.net/topics/391056093"); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("page","1")); try { if(nvps.size()>0){httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));} HttpResponse response=httpClient.execute(httpPost); if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK)//判断是否正确执行 { returnString=EntityUtils.toString(response.getEntity());//InputStream is=response.getEntity().getContent(); } } catch (Exception e) { e.printStackTrace(); } //------------------------------------------------------------------------------------------------ 上面代码运行到HttpResponse response=httpClient.execute(httpPost); 老是抛出 06-18 23:54:39.045 6017-6131/com.logohoo.manstore.app W/System.err﹕ org.apache.http.client.ClientProtocolException 06-18 23:54:39.045 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:585) 06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:506) 06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:484) 06-18 23:54:39.055 6017-6131/com.logohoo.manstore.app W/System.err﹕ at com.logohoo.manstore.app.HttpAdapter.postStringForm(HttpAdapter.java:78) 06-18 23:54:39.065 6017-6131/com.logohoo.manstore.app W/System.err﹕ at com.logohoo.manstore.app.LoginActivity$2.run(LoginActivity.java:66)
tony4geek 2015-06-19
  • 打赏
  • 举报
回复
不知道你具体的怎么构造的,给你个例子看看。

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧