이롭게 현명하게

[JAVA] 웹에서 파일 다운로드하기 (URLConnection,HttpURLConnection) 본문

JAVA

[JAVA] 웹에서 파일 다운로드하기 (URLConnection,HttpURLConnection)

dev_y.h 2023. 1. 16. 18:35
728x90
반응형

※본 포스팅은 윈도우 11, Eclipse 환경을 바탕으로 작성되었습니다.

 

 


목차

URLConnection

HttpURLConnection



[URLConnection]

네트워크에서 데이터를 읽는 방법도 파일에서 읽는 방법과 비슷하다.

스트림을 네트워크에 연결하여 데이터를 읽는다.

자바에서 네트워크 패키지는 java.net이다.

많은 클래스 중에서 java.net.URL은 자바 프로그램과 인터넷상의 원격 컴퓨터를 연결하는 기능을 한다.

원격 컴퓨터가 자원에 접근하는 것에 허가하였다는 전제하에 가능하다.

URL 클래스에서 원격 컴퓨터에 접근하려면 URL 객체를 생성하여, 생성자 호출을 통해 웹 사이트의 주소를 전달한다.

만약 URL 생성자에서 URL을 잘못 지정되었을 경우에 MalformedURLException 예외를 발생시킨다.

try{
	URL testURL = new URL("http://www.naver.com/");
	//code
}catch (MalformedURLException e){
	//예외 처리
}

URL 객체를 생성했다고 해서 원격 컴퓨터와 연결되지는 않는다.

원격 파일을 읽기 위해서는 파일에 연결된 스트림을 열어야 한다.

1. URL 클래스 객체 생성

2. URL 객체를 이용하고 연결하기 위해 URLConnection 객체를 생성

3. URLConnection객체의 getInputStream() 메서드를 호출하여 입력 스트림을 얻는다.

4. 스트림 데이터를 얻는다.

 

URLConnection 객체는 외부 URL을 통해 표현되는 서버에 접속할 수 있다.

파라미터들을 설정할 수 있다.

이때 네트워크에서는 항상 오류가 발생할 수 있기 때문에 메서드가 예외처리를 해주거나 try-catch문을 통해 직접 예외처리를 해주어야 한다.

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

public class URLConnectionReader {

	public static void main(String[] args) throws Exception{
		URL site = new URL("http://www.naver.com/");//URL 클래스의 객체를 생성
		URLConnection url = site.openConnection();//연결 객체를 오픈
		BufferedReader in = new BufferedReader(
							new InputStreamReader(url.getInputStream()));//스트림 연결
		String inline;
		while((inline = in.readLine())!=null) {
			System.out.println(inline);
		}
		in.close();
	}
}

 

 

 


HTML 페이지는 많은 폼(form)을 가지고있다.

폼(form)이란 웹페이지에서 사용자가 데이터를 입력하면 서버로 전달해주는 페이지를 의미한다.

사용자가 데이터를 입력하고 완료 버튼을 클릭하면 웹 브라우저는 네트워크를 통해 해당 URL로 사용자가 입력한 데이터를 전달한다.

웹서버는 이 데이터를 받아서 처리하고다시 사용자에게 HTML페이지 형식으로 응답을 보낸다.

 

클라이언 컴퓨터에서 웹 서버로 데이터를 보내는 방법으로는 GET과 POST 방식이 있다.

GET 방식 : 요청하는 웹 사이트의 주소에 데이터를 붙여 보내는 방식

POST 방식 : 요청 헤더에 데이터를 담는 방식으로 URL에 데이터가 노출이 되지 않습니다.

 

HttpURLConnection 클래스는 URLConnection 클래스를 상속받아 Http에 관련된 기능을 더한 것이다.

HttpURLConnection 클래스를사용하여 서버에 GET 방식으로 검색 요청을 할 수 있다.

구글에서 java를 검색한다면  "http://www.google.com/search?q=java"와 같은 문자열로 구글 서버에 보내면 검색 결과가 HTML형식으로 나타난다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLTest {

	public static void main(String[] args) throws Exception{
		HttpURLTest http = new HttpURLTest();
		String site = "https://www.google.com/search?q=java";
		URL url = new URL(site);
		HttpURLConnection conn= (HttpURLConnection) url.openConnection();
		
		conn.setRequestMethod("GET");//Request 방법 설정
		conn.setRequestProperty("User-Agent", "Mozilla/5.0");//Request 방법 설정
		
		int resCode = conn.getResponseCode();//여기서 실제로 웹서버에 데이터가 전송된다.
		
		BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));//스트림을 연결한다.
		String inputLine;
		StringBuffer output = new StringBuffer();
		
		while ((inputLine = in.readLine())!= null) {
			output.append(inputLine);
		}
		in.close();
		
		System.out.println(output);
	}

}

 


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments