호출하려는 주소는 https://www.xxx.com/abcd.html 형태로 https 이며 같은 도메인에서 호출하였다.
구글링 해보면 connection reset 에러인 경우 아래 2가지 중에 이유가 있는 듯
- 요청측의 SSL 버전 (TLS 버전) 이 잘못 된 경우
- 요청측의 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;