Ga0Lee

[Java] URL, HttpURLConnection 본문

Java

[Java] URL, HttpURLConnection

가영리 2024. 10. 28. 13:45

URL (Unionform Resource Locator)

웹 리소스를 식별하고, Java에서 URL을 통해 파일이나 데이터에 접근할 수 있도록 경로를 제공한다.

URL 객체를 통해 URL의 구성 요소(프로토콜, 호스트명, 포트, 경로 등)를 얻을 수 있다.

URL url = new URL("<https://example.com:8080/path/to/resource?query=1>");
System.out.println("Protocol: " + url.getProtocol());  // https
System.out.println("Host: " + url.getHost());          // example.com
System.out.println("Port: " + url.getPort());          // 8080
System.out.println("Path: " + url.getPath());          // /path/to/resource
System.out.println("Query: " + url.getQuery());        // query=1

HttpURLConnection

HTTP(S) 프로토콜을 통해 서버와 통신하기 위한 클래스로 URLConnection을 상속받는다.

이 클래스는 새 인스턴스를 직접 만들지 못하고, URL.openConnection()을 통해 URL객체에서 HttpURLConnection 인스턴스를 생성할 수 있다.

protected HttpURLConnection (URL u) {
    super(u);
}

protected URLConnection(URL url) {
    this.url = url;
    if (url == null) {
        this.useCaches = defaultUseCaches;
    } else {
        this.useCaches = getDefaultUseCaches(url.getProtocol());
    }
}

이를 사용하여 HTTP 요청을 구성하고 서버에 전송하며, 서버 응답을 받을 수 있다.

주요 메서드

  • setRequestMethod(String method): 요청 메서드 지정 (GET, POST 등).
  • setRequestProperty(String key, String value): 요청 헤더 설정.
  • getResponseCode(): 서버 응답 코드 확인.
  • getInputStream(), getOutputStream(): 서버와 데이터를 주고받는 스트림 연결.
URL url = new URL("<https://api.example.com/data>");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Bearer token");

// 서버 응답 코드 확인
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuilder content = new StringBuilder();
    while ((inputLine = in.readLine()) != null) {
        content.append(inputLine);
    }
    in.close();
    System.out.println(content.toString());
} else {
    System.out.println("Request failed with code: " + responseCode);
}
conn.disconnect();