加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在HttpClient 4.0中设置HttpParams对象

发布时间:2020-12-15 03:02:17 所属栏目:Java 来源:网络整理
导读:我正在创建新的HttpClient,通过在它的构造函数中传递ThreadSafeClientConnManager和HttpParams,但它总是抛出错误的请求错误. 为了弄清楚出了什么问题,我调试了它但都是徒劳的.为我提供一些解决方案 这是我的代码块 sc.register(new Scheme("http",PlainSocke
我正在创建新的HttpClient,通过在它的构造函数中传递ThreadSafeClientConnManager和HttpParams,但它总是抛出错误的请求错误.
为了弄清楚出了什么问题,我调试了它但都是徒劳的.为我提供一些解决方案
这是我的代码块
sc.register(new Scheme("http",PlainSocketFactory.getSocketFactory(),80));
sc.register(new Scheme("https",SSLSocketFactory.getSocketFactory(),443));

HttpParams basicParams = new BasicHttpParams();
ThreadSafeClientConnManager connmgr = new ThreadSafeClientConnManager(basicParams,sc);
ConnManagerParams.setMaxConnectionsPerRoute(
    basicParams,// if we have more than 5 concurrent leads,good problem to have
    new ConnPerRoute() {
        public int getMaxForRoute(HttpRoute httproute) {
        return 5;
    }
}); 

g_client = new DefaultHttpClient(connmgr,basicParams);

// It's a lead,be forgiving with timeout
g_client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,5000);
g_client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,5000);
ConnManagerParams.setTimeout(basicParams,2000);

当我调用g_client.execute(postMethod);在我的代码中显示400状态代码意味着我的请求出了问题.如果我在DefaultHttpClient构造函数中传递null

g_client = new DefaultHttpClient(connmgr,null);

客户端正在成功执行,但由于我需要基本参数集maxconnectionperroute,因此它不正确.我在这里粘贴了令人怀疑的代码.请看看并帮助我.我被困在这里.

我使用的是HttpClient 4.0版本.

解决方法

在我们的一个旧项目中,除了我们在ThreadSafeClientConnManager中的setDefaultMaxPerRoute(int)方法上直接设置每条路由的默认最大连接数之外,我们几乎完全按照您要执行的操作(不需要像您那样设置参数).

另外,我相信ConnManagerParams.setTimeout(basicParams,2000)等同于(并且可以替换为)g_client.getParams().setParameter(ConnManagerPNames.TIMEOUT,2000);.

替代代码示例:

SchemeRegistry sc = new SchemeRegistry();
sc.register(new Scheme("http",80,PlainSocketFactory.getSocketFactory()));
sc.register(new Scheme("https",443,SSLSocketFactory.getSocketFactory()));

ThreadSafeClientConnManager connmgr = new ThreadSafeClientConnManager(sc);
connmgr.setDefaultMaxPerRoute(5);  /// Alternative approach to yours ///

DefaultHttpClient g_client = new DefaultHttpClient(connmgr);
g_client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,5000);
g_client.getParams().setParameter(ConnManagerPNames.TIMEOUT,2000);   /// Alternative approach to yours ///

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读