Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

아님말고

SoketExcepton connection reset 문제 본문

Java

SoketExcepton connection reset 문제

스타박씨 2023. 12. 12. 09:39

호출하려는 주소는 https://www.xxx.com/abcd.html 형태로 https 이며 같은 도메인에서 호출하였다.

구글링 해보면 connection reset 에러인 경우 아래 2가지 중에 이유가 있는 듯

  1. 요청측의 SSL 버전 (TLS 버전) 이 잘못 된 경우
  2. 요청측의 Network outbound 가 막힌 경우

호출하는 방식과 TLS 버전을 변경하며 시도해봤는데 로컬에서는 모두 성공하는데 서버에서는 모두 실패하여, 서버쪽 Network 어딘가에서 막혀있는 것이 아닌가 싶다.

 

HttpsURLConnection 으로 호출

local : 성공

dev : SoketException connection reset 발생

    boolean isLogin = false;
    URL url = new URL("https://xxx");
    HttpsURLConnection connection = null;

    try {
        connection = (HttpsURLConnection) url.openConnection();

        connection.setRequestMethod("GET");
        connection.setRequestProperty("Cookie", "SSOSESSION=" + cookieVal );
        connection.connect();

        int responseCode = connection.getResponseCode();
        log.debug("Response Code: " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        String responseText = response.toString();
        log.debug("responseText: " + responseText);

        if(StringUtils.contains(responseText, "loginSuccess")) {
            isLogin = true;
        }

    }finally {
        if(connection != null) connection.disconnect();
    }

    return isLogin;
 

 

HttpClient 으로 호출

local : 성공

dev : SoketException connection reset 발생


    boolean isLogin = false;
    CloseableHttpClient httpClient = null;

    try {
        httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet("https://xxx");

        httpGet.addHeader("Cookie", "SSOSESSION=" + cookieVal);

        CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
        log.debug("httpResponse result code : {} ", httpResponse.getStatusLine().getStatusCode());

        BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while((inputLine = reader.readLine()) != null) {
            response.append(inputLine);
        }

        reader.close();

        String responseText = response.toString();
        log.debug("responseText : {} ", responseText);

        if(StringUtils.contains(responseText, "loginSuccess")) {
            isLogin = true;
        }

    }finally {
        if(httpClient != null) {
            httpClient.close();
        }
    }

    return isLogin;
 

 

restTemplate 으로 호출

local : 성공

dev : SoketException connection reset 발생


    boolean isLogin = false;

    ResponseEntity<String> response = new restTemplate().exchange(
            "https://xxx",
            HttpMethod.GET,
            request,
            String.class
          );

    String responseBody = response.getBody();
    log.debug("responseBody : {} ", responseBody);

    if(StringUtils.contains(responseBody, "loginSuccess")) {
        isLogin = true;
    }

    return isLogin;
 

 

TLSv1.2으로 호출

local : 성공

dev : SoketException connection reset 발생


    boolean isLogin = false;

    SSLContext context = SSLContext.getInstance("TLSv1.2");
    context.init(null, null, null);

    CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(context)
        .build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
    RestTemplate restTemplate = new RestTemplate(factory);

    HttpHeaders headers = new HttpHeaders();
    headers.set("Cookie", "SSOSESSION=" + cookieVal);

    HttpEntity request = new HttpEntity(headers);

    ResponseEntity<String> response = restTemplate.exchange(
            "https://xxx",
            HttpMethod.GET,
            request,
            String.class
          );

    String responseBody = response.getBody();
    log.debug("responseBody : {} ", responseBody);

    if(StringUtils.contains(responseBody, "loginSuccess")) {
        isLogin = true;
    }

    return isLogin;
 

 

TLSv1.3으로 호출

local : 성공

dev : SoketException connection reset 발생


    boolean isLogin = false;

    SSLContext context = SSLContext.getInstance("TLSv1.3");
    context.init(null, null, null);

    CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(context)
        .build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
    RestTemplate restTemplate = new RestTemplate(factory);

    HttpHeaders headers = new HttpHeaders();
    headers.set("Cookie", "SSOSESSION=" + cookieVal);

    HttpEntity request = new HttpEntity(headers);

    ResponseEntity<String> response = restTemplate.exchange(
            "https://xxx",
            HttpMethod.GET,
            request,
            String.class
          );

    String responseBody = response.getBody();
    log.debug("responseBody : {} ", responseBody);

    if(StringUtils.contains(responseBody, "loginSuccess")) {
        isLogin = true;
    }

    return isLogin;
 
 
Comments