이 객체를 알기 전에 URLConnection 클래스에 대해서 알아보겠습니다. 그 이유는 HttpURLConnection 클래스는 URLConnection을 구현한 클래스이기 때문입니다.
- URLConnection은 웹을 통해 데이터를 주고 받는데 사용됩니다. (RFC 2616을 따릅니다.)
- 데이터의 타입이나 길이는 거의 제한이 없습니다.
- HTTP URL을 처리할 때 도움이 되는 몇 가지 추가적인 메소드를 가집니다.
- 요청 방식을 확인 or 설정, redirect 여부 결정, 응답 코드와 메시지를 read, 프록시 서버가 사용되었는지 여부 확인 메서드등을 가지고 있습니다.
- 다양한 HTTP 응답 코드에 해당하는 상수 값들이 정의되어 있습니다.
- URLConnection 클래스의 getPermission() 메서드를 오버라이드 해놓았습니다.
URLConnection 클래스와 마찬가지로 생성자가 protected로 선언되어있기 때문에 기본적으로 개발자가 직접 HttpURLConnection 객체를 직접 생성할 수 없습니다.
하지만 http URL을 사용하는 URL 객체의 openConnection()
메서드가 리턴하는 URLConnection 객체는 HttpURLConnection의 인스턴스가 될수 있기 때문에 리턴된 URLConnection을 다음처럼 HttpURLConnection으로 캐스팅해서 사용합니다.
URL url = new URL("http://www.naver.com");
HttpURLConnection http = (HttpURLConnection) url.openConnection();
- HttpURLConnection은 기본적으로 GET 방식으로 설정되어 있습니다.
- setRequestMethod() 메서드를 사용해서 POST, PUT, DELETE와 같은 메서드 변경 가능합니다.
- 요청방식은 대문자로 전달해야 합니다.
- 지정된 요청 방식 이외의 파라미터 전달시
java.net.ProtocolException
예외 발생
요청 메서드 종류
GET
POST
DELETE
PUT
OPTIONS
TRACE
setDoInput(boolean) : Server 통신에서 입력 가능한 상태로 만듬
setDoOutput(boolean) : Server 통신에서 출력 가능한 상태로 만듬
Server와 통신을 하고자 할때는 반드시 위 두 method를 true로 해야합니다.
setUseCaches(boolean) : Server 통신에서 캐시 설정 여부를 나타내는데 캐시에 저장한 값을 읽어올 것인지 아니면 동적으로 생성된 데이터를 읽을것인지 결장하는 설정 값으로... 서버에 요청 파라미터를 보내면 그 파라미터 값에 따라 웹 페이지 결과과 그 순간 순간 파라미터의 값에 따라 달라지기 때문에 false로 설정하는 것이 좋습니다.
setConnectTimeout(int): TimeOut 시간 (서버 접속시 연결 시간)
setReadTimeout(int): TimeOut 시간 (Read시 연결 시간)
setRequestProperty("Content-Type", "application/json"): 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
// 실제 서버로 Request 요청 하는 부분. (응답 코드를 받는다. 200 성공, 나머지 에러)
int responseCode = conn.getResponseCode();
// 접속 종료
conn.disconnect();
참조 사이트: https://goddaehee.tistory.com/161 [갓대희의 작은공간], https://ggoreb.tistory.com/114 [나는 초보다]