ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HttpURLConnection
    ☕️ java 2022. 10. 7. 23:31

    URL(보통 HTTP 프로토콜을 사용)을 통해 서버와 통신하는 Java 프로그램을 개발하기 위해

    URLConnectionHttpURLConnection 클래스를 사용한다.

    • 파일, 웹 페이지 업로드 및 다운로드
    • HTTP 요청 및 응답 전송 및 검색

    URLConnection


    URLConnection은 Java 애플리케이션과 URL 간의 연결 관련 모든 클래스의 수퍼클래스이다.

    웹을 통해 데이터를 주고 받는데 사용한다.

    URLConnection 클래스는 일반적인 URL에 대한 API를 제공한다.

    특징

    1. URLConnection은 리소스에 연결하기 전에 구성되어야 한다.
    2. URLConnection 인스턴스를 재사용될 수 없다.
      • 각 리소스에 대한 커넥션 마다 다른 인스턴스를 사용해야 한다.

    HttpURLConnection


    URLConnection을 구현한 클래스

    특징

    1. http URL을 처리할 때 도움이 되는 몇 가지 추가적인 메서드를 가지고 있다.
      • 요청 방식을 확인 or 설정
      • redirect 여부 결정
      • 응답 코드와 메시지를 Read
      • 프록시 서버가 사용되었는지 여부 확인 메서드 등을 가지고 있다.
    2. 다양한 HTTP 응답 코드에 해당하는 상수 값들이 정의되어 있다.
    3. 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

    https://velog.io/@ieed0205/HttpURLConnection

    '☕️ 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

    댓글

Designed by Tistory.