2016-10-18 4 views
0
public HttpResponseBean get(String url, Map<String, String> headers) throws Exception { 
     logger.debug("Sending get request..."); 

     HttpClient httpClient = null; 
     try { 
      int timeout = 30 * 1000; // 30 seconds 
      RequestConfig requestConfig = RequestConfig.custom() 
        .setConnectTimeout(timeout) 
        .setConnectionRequestTimeout(timeout) 
        .setSocketTimeout(timeout).build(); 
      httpClient = HttpClients.custom() 
        .setDefaultRequestConfig(requestConfig).build(); 
      HttpGet httpGetRequest = new HttpGet(url); 

      if (headers != null) { 
       for (Entry<String, String> entry: headers.entrySet()) { 
        httpGetRequest.addHeader(new BasicHeader(entry.getKey(), entry.getValue())); 
       } 
      } 

      HttpResponse response = httpClient.execute(httpGetRequest); 
      HttpResponseBean hrb = new HttpResponseBean(response); 
      logger.debug("Get response: Response: " + hrb.toString()); 
      return hrb; 
     } finally { 
      closeConnection(httpClient); 
     } 
    } 

이 방법은 대부분 잘 작동하지만 한동안 그것은 핸드 셰이크에 걸리고 서버 (tomcat)가 다시 시작될 때까지 오래 걸릴 것입니다. 이 링크 별 버그 ->apache httpclient 4.3 not timing outHttpClient 핸드 셰이크가 영원히 붙임

이 방법이 있습니까? httpclient 4.4.1을 사용하고 있습니다.

답변

0

이 방법이 있습니까? httpclient 4.4.1을 사용하고 있습니다.

여기는 associated bug on the Apache site입니다. 사람들이 4.4.1 버전에 문제가있는 것 같습니다 :

버전 4.4.1에서이 문제가 발생했습니다. 처음에는 4.3에서 해결 된 것으로 표시 되었기 때문에이 스레드를 무시했습니다.

그러나 이것은 4.5.1 버전에서 해결 된 것으로 보입니다. 가능하면 업그레이드하는 것이 좋습니다.

버전 4.3.4에서이 문제가 발생했습니다. 4.5.1로 업그레이드했고 문제가 해결되었습니다. 버전 4.3.4에서

, HTTP :

여기에 추가 정보입니다 // 괜찮 았는데 1 초 후 시간이 초과되었습니다. https를 사용하면 요청이 1 초 이상 지연되고 [...] 서버가 TCP 연결을 닫을 때까지 중단됩니다. 버전 4.5.1에서

에서, [올바른] HTTP 동작은 동일했고, HTTPS에 나는 다음과 같은 예외를 가지고 : [...]이 도움이 org.apache.http.conn.ConnectTimeoutException: Connect to localhost:6171 [localhost/127.0.0.1] failed: Read timed out

희망.

관련 문제