LUC1EL: BLOG

[JAVA] HttpUrlConnection via Proxy (프록시 연결) 본문

소프트웨어 개발

[JAVA] HttpUrlConnection via Proxy (프록시 연결)

LUC1EL 2015. 11. 28. 05:45

자바에서 HttpUrlConnection 클래스를 사용하여 간단히 웹페이지를 긁어올 수 있는데 이 때 웹 오토메이션이나 크롤링에 관련하여 개발할 프로그램에는 대부분이 프록시를 염두하게 된다.


특히 검색엔진에 대하여 어뷰징(특히 광고목적)을 시도하는 프로그램이라면 당연하게도 프록시는 필수 요소인데 자바에서는 시스템 프록시라는 설정을 내재하고 있는데 이것은 전체 커넥션에 대하여 한개의 프록시만 사용하도록 강제하는 것이므로 당연히 여러개의 커넥션을 여러개의 프록시로 접근하고 싶을 때는 사용할 수 없게된다.


아래와 같이 프록시 오브젝트를 사용한다면 간단하게 해결될 문제이다.

// -- Setup connection through proxy
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<proxyserver>", 1234)); // set proxy server and port
HttpURLConnection httpUrlConnetion = (HttpURLConnection) website.openConnection(proxy);
httpUrlConnetion.connect();


JSOUP을 이용한 좀 더 진보된 예제 코드는 아래와 같다.


final URL website = new URL("http://your.url.here"); // The website you want to connect

// -- Setup connection through proxy
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<proxyserver>", 1234)); // set proxy server and port
HttpURLConnection httpUrlConnetion = (HttpURLConnection) website.openConnection(proxy);
httpUrlConnetion.connect();

// -- Download the website into a buffer
BufferedReader br = new BufferedReader(new InputStreamReader(httpUrlConnetion.getInputStream()));
StringBuilder buffer = new StringBuilder();
String str;

while( (str = br.readLine()) != null )
{
    buffer.append(str);
}

// -- Parse the buffer with Jsoup
Document doc = Jsoup.parse(buffer.toString());


코드를 보면 어렵지 않게 구현하여 사용할 수 있다는 것을 알 수 있다.