Java - 14. 네트워크 - URL

godkimchichi·2020년 10월 12일
0

고급자바

목록 보기
33/44

InetAddress 클래스

  • IP 주소를 다룰 때 사용하는 클래스
  • 이것이자바다 p.1055

주요메서드

  • getByName(), getLocalHost()
  • getHostName()
  • getHostAddress()

예제: T01 - Naver와 내 컴퓨터

1. Naver 의 IP 정보, Host Name, Host Address

// 1. Naver의 IP 정보 가져오기
InetAddress naverIp = InetAddress.getByName("www.naver.com");
// new 없이 static메서드를 이용한 객체 생성 방식

// 2. Host Name과 Host Address 가져오기
//    Host Name: 머신이름, 도메인명, 또는 ip주소 문자열
System.out.println("네이버의 Host Name => " + naverIp.getHostName()); // 도메인 없으면 address 나옴
System.out.println("네이버의 Host Address => " + naverIp.getHostAddress());

결과

2. 내 컴퓨터의 IP 정보, Host Name, Host Address

// 1. 내 컴퓨터의 IP주소 가져오기
InetAddress localIp = InetAddress.getLocalHost();

// 2. Host Name과 Host Address 가져오기
System.out.println("내 컴퓨터의 Host Name => " + localIp.getHostName());
System.out.println("내 컴퓨터의 Host Address => " + localIp.getHostAddress());

결과

3. IP 주소가 여러개인 호스트의 정보 가져오기

InetAdress[] naverIps = InetAddress.getAllByName("www.naver.com");
for (InetAddress nIp : naverIps) {
  System.out.println(nIp.toString());
}

결과

URL 클래스

  • URL(Uniform Resource Locator)
    • 인터넷에서 접근 가능한 자원(Resource)의 주소를 표현할 수 있는 형식
    • URL을 안다 = 특정 리소스에 접근해서 가져올 수 있다
  • URL클래스
    • 인터넷에서 존재하는 서버들의 자원에 접근할 수 있는 주소를 관리하는 클래스
    • URL을 추상화하여 만든 클래스

URI (Uniform Resource Identifier)

  • 특정 자원에 접근하기 위한 형식이나 고유한 이름
  • URL보다 넓은 의미의 개념

URI 예시

예제: T02 - URL클래스의 인스턴스 메서드들

// http://ddit.or.kr:80/index.html?ttt=123&name=bbb#kkk
URL url = new URL("http", "ddit.or.kr", 80, "main/index.html?ttt=123&name=bbb#kkk");
// 프로토콜, 호스트, 포트, 파일
    • getProtocol()
    • getHost()
    • getFile() : 쿼리정보 포함
    • getQuery() : ? 이후의 것 (&도 포함)
    • getPath() : 쿼리정보 미포함
    • getPort()
    • getRef() : html의 id와 같은 참조값
    • toExternalForm()
    • toString()
    • toURI().toString()

URLConnection 클래스

  • 애플리케이션과 URL간의 통신 연결을 위한 추상클래스
  • 원격자원에 접근하는데 필요한 정보를 갖고 있다.
  • 원격서버의 헤더 정보, 해당 자원의 길이와 타입정보, 언어 등을 얻어올 수 있다.
  • 추상화 클래스이므로 URL클래스의 openConnection()메소드를 이용해 객체 생성
  • URLConnection 클래스의 connect()메소드를 호출해야 객체가 완성됨
  • 연결 관련 기능을 제공한다. 이 클래스 없으면 연결 못함. URL이랑 URLConnection은 세트!
URL url = new URL("http://java.sun.com");
URLConnection urlCon = url.openConnection();
urlCon.connect();

예제: T03 - Naver 서버의 정보와 파일내용 출력

URL url = new URL("https://www.naver.com/index.html");
  • http로 접근하려고 하면 302 (or 307) found 발생 -> https로 들어가야함

1단계: Header 정보 가져오기

// 1. URLConnection 객체 구하기
URLConnection urlCon = url.openConnection();
// URLConnection은 추상클래스, httpConnection객체가 넘어옴(다형성)

System.out.println("Content-Type : " + urlCon.getContentType());
System.out.println("Encoding : " + urlCon.getContentEncoding());
System.out.println("Content : " + urlCon.getContent());

결과

Map<String, List<String>> headerMap = urlCon.getHeaderFields();

// Header의 key값 구하기
Iterator<String> iterator = headerMap.keySet().iterator();
while (iterator.hasNext()) {
  String key = iterator.next();
  System.out.println(key + " : " + headerMap.get(key));
}

결과

2단계: 해당 호스트의 페이지 내용 (Body) 가져오기

// 1. 파일을 읽어오기 위한 스트림 객체 생성
// 방법1: URLConnection의 getInputStream()메서드 이용하기.
//InputStream is = url.getInputStream(); //HTTPInputStream가져옴
// 방법2: URL객체의 openStream()메서드 이용하기
InputStream is = url.openStream();

// 2. (한글 있을수도 있으니) 보조스트림으로 바이트기반을 문자기반으로 처리
InputStreamReader isr = new InputStreamReader(is, "utf-8");

// 3. 읽기
int c;
while ((c = isr.read()) != -1) {
System.out.print((char) c);
}

// 4. 스트림 닫기
isr.close();

결과

  • 어마어마한 html 파일 등장

참고

profile
갈 길이 멀다

0개의 댓글