[java] Java에서 HttpClient 오류 처리 방법은?

Java에서 HttpClient를 사용하여 HTTP 요청을 보낼 때, 오류 처리는 매우 중요합니다. 이 글에서는 Java에서 HttpClient 오류를 처리하는 방법을 살펴보겠습니다.

1. Try-Catch 문 사용

가장 기본적인 방법은 try-catch 문을 사용하여 HttpClient의 execute 메서드를 호출하는 동안 발생할 수 있는 예외를 처리하는 것입니다. 예를 들면 다음과 같습니다.

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientExample {

    public static void main(String[] args) {
        HttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://www.example.com");

        try {
            CloseableHttpResponse response = client.execute(request);
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println(responseBody);
            response.close();
        } catch (Exception e) {
            // 오류 처리 로직 구현
            e.printStackTrace();
        }
    }
}

이 코드에서는 execute 메서드를 호출하는 부분을 try 블록 안에 넣고, catch 블록에서 예외를 처리하는 로직을 구현합니다.

2. HttpResponse의 상태 코드 확인

HttpClient에서는 서버로부터 받은 응답의 상태 코드를 확인하여 오류를 처리할 수도 있습니다. 예를 들면 다음과 같습니다.

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpEntity;

public class HttpClientExample {

    public static void main(String[] args) {
        HttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://www.example.com");

        try {
            CloseableHttpResponse response = client.execute(request);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String responseBody = EntityUtils.toString(entity);
                System.out.println(responseBody);
            } else {
                // 오류 처리 로직 구현
                System.out.println("오류 발생: " + statusCode);
            }
            response.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드에서는 execute 메서드를 호출한 후, getStatusLine().getStatusCode()를 통해 응답의 상태 코드를 확인합니다. 상태 코드가 200인 경우에는 정상적인 응답을 받았다고 판단하고, 그 외의 경우에는 오류 처리 로직을 구현합니다.

3. 예외 처리 세부화

HttpClient는 여러 가지 예외를 던질 수 있습니다. 예외를 세부화하여 특정 예외에 대한 오류 처리 로직을 구현할 수도 있습니다. 예를 들면 다음과 같습니다.

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.conn.HttpHostConnectException;

public class HttpClientExample {

    public static void main(String[] args) {
        HttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://www.example.com");

        try {
            CloseableHttpResponse response = client.execute(request);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String responseBody = EntityUtils.toString(entity);
                System.out.println(responseBody);
            } else {
                // 오류 처리 로직 구현
                System.out.println("오류 발생: " + statusCode);
            }
            response.close();
        } catch (ClientProtocolException e) {
            // 프로토콜 오류 처리 로직 구현
            e.printStackTrace();
        } catch (HttpHostConnectException e) {
            // 연결 오류 처리 로직 구현
            e.printStackTrace();
        } catch (Exception e) {
            // 기타 예외 처리 로직 구현
            e.printStackTrace();
        }
    }
}

위 코드에서는 catch 블록을 더 세부적으로 구현하여, 특정 예외에 대한 오류 처리 로직을 따로 구현하였습니다.


Java에서 HttpClient의 오류 처리 방법을 알아보았습니다. 이러한 오류 처리 방법을 활용하여 안정적인 HTTP 통신을 구현할 수 있습니다.