-
HttpURLConnection☕️ java 2022. 10. 7. 23:31
URL(보통 HTTP 프로토콜을 사용)을 통해 서버와 통신하는 Java 프로그램을 개발하기 위해
URLConnection 및 HttpURLConnection 클래스를 사용한다.
- 파일, 웹 페이지 업로드 및 다운로드
- HTTP 요청 및 응답 전송 및 검색
URLConnection
URLConnection은 Java 애플리케이션과 URL 간의 연결 관련 모든 클래스의 수퍼클래스이다.
웹을 통해 데이터를 주고 받는데 사용한다.
URLConnection 클래스는 일반적인 URL에 대한 API를 제공한다.
특징
- URLConnection은 리소스에 연결하기 전에 구성되어야 한다.
- URLConnection 인스턴스를 재사용될 수 없다.
- 각 리소스에 대한 커넥션 마다 다른 인스턴스를 사용해야 한다.
HttpURLConnection
URLConnection을 구현한 클래스
특징
- http URL을 처리할 때 도움이 되는 몇 가지 추가적인 메서드를 가지고 있다.
- 요청 방식을 확인 or 설정
- redirect 여부 결정
- 응답 코드와 메시지를 Read
- 프록시 서버가 사용되었는지 여부 확인 메서드 등을 가지고 있다.
- 다양한 HTTP 응답 코드에 해당하는 상수 값들이 정의되어 있다.
- URLConnection 클래스의 getPermission() 메서드를 오버라이드 해놓았다.
생성
URL url = new URL("<http://www.naver.com>"); HttpURLConnection http = (HttpURLConnection) url.openConnection();
요청 방식
HttpURLConnection은 기본적으로 GET 메서드를 사용한다.
- setRequestMethod() 메서드를 사용해서 메서드 변경 가능하다.
- 요청방식은 대문자로 전달
- 지정된 요청 방식 이외의 파라미터 전달시 ProtocolException 발생
HTTP Keep-Alive 기능
HttpURLConnection 클래스는 HTTP Keep-Alive 기능을 명시적으로 끄지 않는 한 기본적으로 지원한다.
즉, HttpURLConnection 클래스는 서버가 연결을 종료하기 전에 동일한 클라이언트에서 다시 연결을 하면 기존에 연결된 소켓을 재사용한다.
- 이때 disconnect() 메서드는 특정 호스트와 대화가 끝난 시점에 클라이언트가 서버와의 연결을 끊을 수 있도록 한다.
사용해보기
연결
구글에 요청을 보내는 예제 코드
private static final String domain = "<http://google.co.kr>"; public static void connectTest() { try { URL url = new URL(domain); - (1) HttpURLConnection connect = (HttpURLConnection) url.openConnection(); - (2) System.out.println(connect.getResponseCode()); System.out.println(connect.getResponseMessage()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
- (1) : String 으로 나타낸 domain의 주소로 URL 클래스를 생성
- (2)
- url.openConnection() 을 이용하여 URLConnection 클래스를 얻는다
- URLConnection을 HttpURlConnection 형태로 캐스팅(casting) 해서 사용한다.
세팅
try{ URL u = new URL(domain); HttpURLConnection connection = (HttpURLConnection) u.openConnection(); //con.getInputStream(); /** settings **/ //con.setDoInput(true); //con.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("GET"); // ............(1) connection.setRequestProperty("key","value"); // ...(2) connection.setConnectTimeout(1000); // .............(3) connection.setReadTimeout(1000); // ...............(4) System.out.println(connection.getResponseCode()); // 200 System.out.println(connection.getResponseMessage()); // OK }catch(MalformedURLException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); }
- (1)
- 메서드 변경이 가능
- 지정된 요청 방식으로 파라미터를 전달
- (2)
- request Header 설정
- key-value 형식으로 다양한 요청 설정이 가능
- (3)
- 서버와의 연결제한 시간
- 밀리세컨드 단위로 설정
- 타임아웃이 0 → 무한 타임아웃
- (4)
- 서버 연결 후 데이터를 읽는 시간
- 밀리 세컨드 단위
- 0이 아닌 값은 입력스트림에서 읽을 때 초과하는 시간을 지정
- 타임아웃이 0 → 무한 타임 아웃
참고 자료
https://blueyikim.tistory.com/2199
https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html
'☕️ java' 카테고리의 다른 글
equals / hashCode (0) 2022.12.07 CheckedException 과 UncheckedException (0) 2022.10.10 가비지 컬렉션(GC) ❓ (0) 2022.10.10 Java version 별 특징 (0) 2022.10.09 Java JSON 파싱 (0) 2022.10.07