Development/Java

[JAVA] HTTP 페이지 읽기

반응형

HTTP가 무엇인지에 대한 포스팅에 이어


JAVA에서 해당 HTTP 연결을 수립하는 것과 동시에 페이지를 읽어오는 방법에 대한 코드이다.




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

public class Http {
	
	public static void main(String[] args) throws MalformedURLException{
		
		URL url = new URL("http://www.tistory.com");
		String str = "";
		String line = "";
		
		try {
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("POST");
			BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream()));
			
			while((line = rd.readLine()) != null){
				str += line;
				System.out.println(line);
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(str);
	}

}



간단하게 HttpURLConnection 이라는 클래스를 이용하여 새로운 URL에 대한 연결을 수립한다.


이 때 URL 클래스의 openConnection(); 메소드를 이용하여 생성해둔 URL에 대한 연결을 시작한다.


연결 방법엔 두가지가 있는데 GET/POST 방식이 있다.


차이점에 대한 정보


GET : www.tistory.com?page=1&pageset=2 ... 이런식으로 파라미터(Parameter)들이 URL에 직접 달리게 된다.

단, 파라미터에 대한 전송할 수 있는 데이터의 제한이 255자로 제한되며, 어떠한 보안도 유지되지 않는다.

(사용자가 파라미터에 대한 정보를 수집할 수 있도록 그냥 놔두고 중요 데이터를 GET방식을 이용한다면 유출될 수 있다.)


POST : www.tistory.com <- 단지 이런 형태로 나오지만 파라미터들이 서버에 전달이 되고, 브라우저에 보이지 않는다.

전송할 수 있는 데이터의 양이 실질적으로 제한이 없다. 사용자의 브라우저에서 보이지 않아 GET방식보다는 안전하다.


단지, 두 방식 모두 안전하지 않다고 보는게 맞고 POST가 무조건적으로 안전하다고 볼 수도 없다.


왜냐면 패킷 스니핑을 통한 데이터 송/수신을 모니터링 해본다면 단지 브라우저에 보이고 안보이고의 차이일 뿐, 실제의 데이터가 암호화 되어 전송되는 것이 아니다.


이러한 맥락에서 중요 데이터는 암호화를 해서 전송하고 수신하는 것이 안전한 방법이다.


특히, GET/POST의 차이가 무엇이냐는 질문에 맹목적으로 POST가 안전합니다. 라는 사람들이 많은데 왜 안전하냐는 꼬리질문에는 단지 URL에 표시가 안되서 안전하다는 말밖에..? 

안타까운 것은 해커들이 브라우저에 표시된 URL을 보고 해킹을 할까? 라는 생각을 다시 해본다면 답이 나올 것이라 생각한다.


POST가 무조건 좋은 것은 아니지만, 적어도 GET방식에 비하면 장점이 많으니 왠만하면 POST방식을 이용하자.(GET을 꼭 사용해야 할 때가 있는 경우를 제외한)


또한, 해당 코드는 직접 Http Request를 날리는것이지만, 성능 및 안정성은 보장이 안되므로

실제 서비스에는 Http Client Library를 쓰도록 하자(OkHttp, Unirest 등)

반응형