zoukankan      html  css  js  c++  java
  • HttpClient 如何设置超时时间

    今天分享一个巨坑,就是 HttpClient。这玩意有多坑呢?就是每个版本都变,近日笔者深受其害。
    先看一下代码,我要发送请求调用一个c++接口。

    public static String doPostWithJSON(String url, String json) throws Exception {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
        StringEntity se = new StringEntity(json,  Charset.forName("UTF-8"));
        se.setContentType("application/json");
        httpPost.setEntity(se);
        CloseableHttpResponse response =  client.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity, "UTF-8");
        return result;
    }
    

    嗯,坑爹的地方来了,这个玩意发送请求,没设置超时时间,只要不响应,他能一直在这等着,这谁能受得了。
    我要加个超时时间。
    第二个大坑来了。
    我记得以前设置超时时间是这样的。

    client.setConnectionTimeout(10000); 
    client.setTimeout(10000);
    

    我发现,特么没这个方法。
    于是查阅资料。发现HttpClient太善变了。每个版本都变api。
    4.3版本是这样的

    httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,10000);
    httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,10000);
    
    

    4.3以后是这样的。

    RequestConfig requestConfig =  RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(10000).build();
    httpGet.setConfig(requestConfig);
    

    最后我根据我的版本,选了4.3的那种方式,解决问题。

  • 相关阅读:
    转发 微博 Qzone 微信 草根创业英雄时代落幕:贾跃亭戴威们一去不复返
    python 发送大Json格式数据
    python post json数据
    python post 参数
    IntelliJ Idea 常用10款插件(提高开发效率)
    IDEA操作技巧:一些常用且实用的插件
    nacos
    Sentinel 与 Hystrix 的对比
    阿里启动新项目:Nacos,比 Eureka 更强!
    D3.js学习(一)
  • 原文地址:https://www.cnblogs.com/jichi/p/11331485.html
Copyright © 2011-2022 走看看