A versão 4.5 do HttpClient define o tempo limite da conexão-CloseableHttpClient define o tempo limite (diferente de 4.3.2)

Depois que o HttpClient foi atualizado para a versão 4.5, a API mudou muito. Depois do HttpClient 4, a API não ficou muito estável. Acho que, após a abstração da versão 4.5, muitas APIs devem estar estáveis ​​em breve.

       Para usar o HttpClient, geralmente você precisa definir o tempo limite de conexão e o tempo limite de dados. Esses dois parâmetros são muito importantes.O objetivo é evitar que seu aplicativo seja afetado devido ao tempo limite ao acessar outro http.

       Na versão 4.5, as configurações desses dois parâmetros são abstraídas em RequestConfig e construídas pelo Builder correspondente. Os exemplos específicos são os seguintes:

CloseableHttpClient httpclient = HttpClients.createDefault();  
HttpGet httpGet = new HttpGet("http://stackoverflow.com/");  
RequestConfig requestConfig = RequestConfig.custom()  
        .setConnectTimeout(5000).setConnectionRequestTimeout(1000)  
        .setSocketTimeout(5000).build();  
httpGet.setConfig(requestConfig);  
CloseableHttpResponse response = httpclient.execute(httpGet);  
System.out.println("得到的结果:" + response.getStatusLine());//得到请求结果  
HttpEntity entity = response.getEntity();//得到请求回来的数据

setConnectTimeout: Defina o tempo limite de conexão em milissegundos.

setConnectionRequestTimeout: Defina o período de tempo limite para obter a Conexão do Connect Manager, em milissegundos. Este atributo é um atributo recém-adicionado, porque a versão atual pode compartilhar o pool de conexão.

setSocketTimeout: O período de tempo limite para solicitar a obtenção de dados, em milissegundos. Se você acessar uma interface e deixar de retornar dados por um determinado período, você simplesmente abandonará a chamada.

=================================================

Eu encontrei um problema ontem e precisava definir o período de tempo limite de CloseableHttpClient. Verifiquei o documento oficial a seguir.

Crie um novo RequestConfig:

RequestConfig defaultRequestConfig = RequestConfig.custom()
    .setSocketTimeout(5000)
    .setConnectTimeout(5000)
    .setConnectionRequestTimeout(5000)
    .setStaleConnectionCheckEnabled(true)
    .build();

Esse tempo limite pode ser definido no nível do cliente como o valor padrão para todas as solicitações:

CloseableHttpClient httpclient = HttpClients.custom()
    .setDefaultRequestConfig(defaultRequestConfig)
    .build();
A solicitação não herda a configuração da solicitação no nível do cliente, portanto, ao personalizá-la, você precisa copiar a configuração padrão do cliente:
HttpGet httpget = new HttpGet("http://www.apache.org/");
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
    .setProxy(new HttpHost("myotherproxy", 8080))
    .build();
httpget.setConfig(requestConfig);

 

O tempo limite para a versão 4.3 é assim:

public static String httpPost (String url, String jsonString) {
     // 设置 HTTP 请求 参数
String result = null ; 
    HttpClient httpClient = new DefaultHttpClient (); 
    HttpPost httpPost = novo HttpPost (url);
    tente { 
        httpClient.getParams (). setParameter (CoreConnectionPNames. CONNECTION_TIMEOUT , 10000); // 设置 请求 超时 时间 10s
 StringEntity entity = new StringEntity (jsonString); 
        entity.setContentEncoding ( "UTF-8" ); 
        entity.setContentType ( "application / json" );
        httpPost.setEntity (entidade); 
        HttpEntity resEntity = httpClient.execute (httpPost) .getEntity (); 
        resultado = EntityUtils.toString (resEntity, "UTF-8" ); 
    } catch (Exception e) {
         logger .error ( "http 接口 调用 异常 : url é ::" + url, e);
        return null ; 
    } finalmente { 
        httpClient.getConnectionManager (). shutdown (); 
    } resultado de retorno ; 
}
    

 

A versão 4.5.2 é assim:

 public static String testTimeout (String url) {

        // Definir parâmetros de solicitação HTTP

        Resultado da string = nulo;

        Cliente CloseableHttpClient = HttpClients.createDefault ();

        HttpGet httpGet = novo HttpGet (url);

        RequestConfig requestConfig = RequestConfig.custom ()

                .setConnectTimeout (50000) .setConnectionRequestTimeout (10000)

                .setSocketTimeout (50000) .build ();

        httpGet.setConfig (requestConfig);

        experimentar {

            Resposta CloseableHttpResponse = client.execute (httpGet);

            resultado = EntityUtils.toString (response.getEntity (), "UTF-8");

        } catch (ClientProtocolException e) {

            logger.error ("exceção de chamada de interface http: url é ::" + url, e);

            return null;

        } catch (exceção e) {

            logger.error ("exceção de chamada de interface http: url é ::" + url, e);

            return null;

        } finalmente {

            experimentar {

                client.close ();

            } catch (IOException e) {

                logger.error ("exceção de chamada de interface http: url é ::" + url, e);

            }

        }

        resultado de retorno;

    }

Acho que você gosta

Origin blog.csdn.net/zhaofuqiangmycomm/article/details/114526742
Recomendado
Clasificación