CloseableHttpClient 4.5.2如何设置等待超时?

CloseableHttpClient 4.5.2中执行response = httpClient.execute(httpPost);
没有任何的等待效果,直接返回无连接,如果我想让他保持请求30秒是否可以?

        RequestConfig defaultRequestConfig  = RequestConfig.custom().
                setConnectTimeout(30000).setConnectionRequestTimeout(30000)
                .setSocketTimeout(30000).build();
        //        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
        CloseableHttpResponse response = null; 
        String resultString = "";
            HttpPost httpPost = new HttpPost(url);  
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);  
            httpPost.setEntity(entity);  

            httpPost.setConfig(defaultRequestConfig);
            String uuid=UuidUtil.getuuid();
            PgmsDao pgms=new PgmsDao();
            LoginUI login=(LoginUI) FacesUtil.getSessionMapValue("loginUI");
            String netid=login.getLdapuser().getNetid();
            String request_user=login.getLdapuser().getName();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String request_date = sdf.format(new Date());
            Map<String,String> request_map=(Map)new JSONObject().fromObject(json);
            String action=request_map.get("action");

                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
                String response_date = sdf.format(new Date());
                Map<String,String>result=(Map)new JSONObject().fromObject(resultString);
                String status=result.get("status");

如果是别的版本也可以,请大佬指点

用这个没问题:https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.5.2

https://blog.csdn.net/h254532699/article/details/54342470/

import lombok.extern.slf4j.Slf4j;
import org.apache.http.*;
import org.apache.http.client.CookieStore;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.AuthSchemes;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.config.*;
import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpConnectionFactory;
import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.*;
import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
import org.apache.http.io.HttpMessageParser;
import org.apache.http.io.HttpMessageParserFactory;
import org.apache.http.io.HttpMessageWriterFactory;
import org.apache.http.io.SessionInputBuffer;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicLineParser;
import org.apache.http.message.LineParser;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.CharArrayBuffer;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.CodingErrorAction;
import java.util.Arrays;
public class SyncHttpClientUtil {

private static HttpMessageParserFactory<HttpResponse> responseParserFactory;

private static HttpMessageWriterFactory<HttpRequest> requestWriterFactory = new DefaultHttpRequestWriterFactory();

static HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection> connFactory;

private static SSLContext sslcontext = SSLContexts.createSystemDefault();

private static Registry<ConnectionSocketFactory> socketFactoryRegistry;

private static DnsResolver dnsResolver;

private static PoolingHttpClientConnectionManager connManager;

private static RequestConfig defaultRequestConfig;

private static CloseableHttpClient httpclient;

static{

    customerHttpMessageParserFactory();
    customerConnectionFactory();
    customerRegistry();
    customerDnsResolver();
    customerPoolingConnectionManager();
    customerRequestConfig();
    custoemrHttpClients();
}

public static void customerConnectionFactory(){
    connFactory = new ManagedHttpClientConnectionFactory(
            requestWriterFactory, responseParserFactory);
}


public static void custoemrHttpClients(){
    // Use custom cookie store if necessary.
    CookieStore cookieStore = new BasicCookieStore();
    CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    httpclient = HttpClients.custom()
            .setConnectionManager(connManager)
            .setDefaultCookieStore(cookieStore)
            .setDefaultCredentialsProvider(credentialsProvider)
            .setDefaultRequestConfig(defaultRequestConfig)
            .build();
}

public static void customerRequestConfig(){
    defaultRequestConfig = RequestConfig.custom()
            .setCookieSpec(CookieSpecs.DEFAULT)
            .setExpectContinueEnabled(true)
            .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
            .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
            .build();
}

public static void customerPoolingConnectionManager(){
    connManager = new PoolingHttpClientConnectionManager(
            socketFactoryRegistry, connFactory, dnsResolver);

    // socket配置
    SocketConfig socketConfig = SocketConfig.custom()
            .setTcpNoDelay(true)
            .build();
    connManager.setDefaultSocketConfig(socketConfig);
    // 当连接静止1秒钟时候,会启动验证
    connManager.setValidateAfterInactivity(10000);

    // 创建消息约束
    MessageConstraints messageConstraints = MessageConstraints.custom()
            .setMaxHeaderCount(200)
            .setMaxLineLength(2000)
            .build();
    // 创建连接配置
    ConnectionConfig connectionConfig = ConnectionConfig.custom()
            .setMalformedInputAction(CodingErrorAction.IGNORE)
            .setUnmappableInputAction(CodingErrorAction.IGNORE)
            .setCharset(Consts.UTF_8)
            .setMessageConstraints(messageConstraints)
            .build();
    // 配置连接管理器以使用连接配置,可以为指定的主机设置其自定义的配置连接管理器
    connManager.setDefaultConnectionConfig(connectionConfig);

// connManager.setConnectionConfig(new HttpHost("somehost", 80), ConnectionConfig.DEFAULT);

    //为持久连接配置总最大值或每条路由限制,这些连接可以保存在池中,也可以由连接管理器租用。
    connManager.setMaxTotal(100);
    connManager.setDefaultMaxPerRoute(10);
}

public static void customerDnsResolver(){
    dnsResolver = new SystemDefaultDnsResolver();
}

public static void customerRegistry(){
    socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
            .register("http", PlainConnectionSocketFactory.INSTANCE)
            .register("https", new SSLConnectionSocketFactory(sslcontext))
            .build();
}


public static void customerHttpMessageParserFactory(){
    responseParserFactory = new DefaultHttpResponseParserFactory() {

        @Override
        public HttpMessageParser<HttpResponse> create(
                SessionInputBuffer buffer, MessageConstraints constraints) {
            LineParser lineParser = new BasicLineParser() {

                @Override
                public Header parseHeader(final CharArrayBuffer buffer) {
                    try {
                        return super.parseHeader(buffer);
                    } catch (ParseException ex) {
                        log.info("HttpClient eror : {}" ,ex.getMessage());
                        return new BasicHeader(buffer.toString(), null);
                    }
                }

            };
            return new DefaultHttpResponseParser(
                    buffer, lineParser, DefaultHttpResponseFactory.INSTANCE, constraints) {

                @Override
                protected boolean reject(final CharArrayBuffer line, int count) {
                    return false;
                }

            };
        }

    };
}



public static <T> T executeGet(URI uri, Header[] headers, ResponseHandler<T> handler){
    log.info("执行Http Het请求,请求URI = {}",uri.getPath());
    HttpGet httpGet = new HttpGet(uri);
    httpGet.setConfig(RequestConfig
            .copy(defaultRequestConfig)
            .setSocketTimeout(10000)
            .setConnectTimeout(10000)
            .setConnectionRequestTimeout(10000)
            .build());

    if(headers != null && headers.length > 0)
        httpGet.setHeaders(headers);
    T execute = null;
    try {
        execute = httpclient.execute(httpGet, handler);
    } catch (IOException e) {
        log.info("执行Http Het请求出错,errorMsg = {}",e);
    }
    return execute;
}
}   

我不管,我要分