Java URLConnection 클래스 - HTTP 통신 수행

HTTP 통신 수행 – URLConnection 클래스

URL(String spec)
URL(String protocol, String host, int port, String file)
  spec: URL 문자열
  protocol: 프로토콜 이름
  host: 호스트 이름
  port:포트 번호
  file: 파일 이름

URLConnection 클래스(java.net 패키지)를 이용하면 HTTP를 통해 웹 페이지에 액세스할 수 있다. URLConnetion 객체는 URL#openConnection 메서드로 받아 올 수 있다.

URLConnection 클래스의 주요 메소드

URLConnection 클래스에서 사용할 수 있는 주된 메소드는 다음과 같다.

메서드 개요
void connect() 현재 URL에 연결한다.
int getConnectTimeout() 연결 시간 초과 시간을 받아온다.
Object getContent() 콘텐츠 받아온다.
String getContentEncoding() content-encoding 헤더의 값을 받아온다.
int getContentLength() content-length 헤더의 값을 받아온다.
String getContentType() content-type 헤더의 값을 받아온다.
long getDate() date 헤더의 값을 받아온다.
String getHeaderField(String name) 지정된 헤더의 값을 받아온다.
long getHeaderFieldDate(String name, long Default) 지정된 헤더를 일자로서 해석한 값을 받아온다.
int getHeaderFieldInt(String name, int Default) 지정된 헤더를 수치로서 해석한 값을 취득
InputStream getInputStream() 현재의 접속을 읽어들이는 입력 스트림을 받아온다.
OutputStream getOutputStream() 현재의 접속에 기입하는 출력 스트림을 받아온다.
void setConnectTimeout(int timeout) 연결 시간 초과 시간 설정한다.

URLConnection 예제

다음은 지정된 URL로부터 컨텐츠를 받아와서 그 내용을 출력하는 예제이다.

UrlConnect.java

package com.devkuma.basic.http;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnect {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://devkuma.com/");
            URLConnection con = url.openConnection();
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"))) {
                while (reader.ready()) {
                    System.out.println(reader.readLine());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

실행 결과:

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

URLConnection#getInputStream 메소드로 입력 스트림을 받아 올 수 있으며, 나머지는 스트림의 조작 순서에 따라 입력을 읽어들일 뿐이다. 좀 더 자세한 내용은 “스트림"을 참조하여라.



최종 수정 : 2022-09-24