Apache HttpComponents를 이용한 GET, POST 요청하기

예전에는 Jakarta Commons HttpClient 프로젝트로 commons 프로젝트들이랑 옹기종기 같이 모여 있었는데 문득 사이트에 가보니 

프로젝트명이 Apache HttpComponents 로 바껴있고  라이브러리 사용하는 것도 훅 달라진것 같았다.

테스트겸 겸사겸사 GET, POST 요청을 하는 클래스를 맹글어 보았다.



소스코드
package proxy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class HttpProxy {
	/**
	 * POST 요청
	 * @param url       요청할 url
	 * @param params    파라메터
	 * @param encoding  파라메터 Encoding
	 * @return 서버 응답결과 문자열
	 */
	public String post(String url, Map params, String encoding){
		HttpClient client = new DefaultHttpClient();
		
		try{
			HttpPost post = new HttpPost(url);
			System.out.println("POST : " + post.getURI());
			
			List<NameValuePair> paramList = convertParam(params);
			post.setEntity(new UrlEncodedFormEntity(paramList, encoding));
			
			ResponseHandler<String> rh = new BasicResponseHandler();

			return client.execute(post, rh);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			client.getConnectionManager().shutdown();
		}
		
		return "error";
	}
	
	public String post(String url, Map params){
		return post(url, params, "UTF-8");
	}

	
	
	
	/**
	 * GET 요청
	 * POST 와 동일
	 */
	public String get(String url, Map params, String encoding){
		HttpClient client = new DefaultHttpClient();

		try{
			List<NameValuePair> paramList = convertParam(params);
			HttpGet get = new HttpGet(url+"?"+URLEncodedUtils.format(paramList, encoding));
			System.out.println("GET : " + get.getURI());
			
			ResponseHandler<String> rh = new BasicResponseHandler();
			
			return client.execute(get, rh);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			client.getConnectionManager().shutdown();
		}
		
		return "error";
	}
	
	public String get(String url, Map params){
		return get(url, params, "UTF-8");
	}
	
	
	
	private List<NameValuePair> convertParam(Map params){
		List<NameValuePair> paramList = new ArrayList<NameValuePair>();
		Iterator<String> keys = params.keySet().iterator();
		while(keys.hasNext()){
			String key = keys.next();
			paramList.add(new BasicNameValuePair(key, params.get(key).toString()));
		}
		
		return paramList;
	}
	
	

	// Test
	public static void main(String[] args) {
		HttpProxy p = new HttpProxy();
		
		Map params = new HashMap();
		params.put("w", "tot");
		params.put("q", "한예슬");
		
		System.out.println(p.get("http://m.search.daum.net/search", params));
	}
}

HttpProxy.java






라이브러리 다운로드는  http://hc.apache.org/downloads.cgi 요기에 가서 다운로드 받던지

Maven을 사용하고 있다면 디펜던시에
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.1.2</version>
</dependency>
 요걸 추가해 주면 된다.




그리고~ http://hc.apache.org/downloads.cgi 요기에서 다운받아 보면 압축파일안에  examples, tutorial, api 문서도 같이 들어 있어서 참고하기 좋다~

※ 위 예제를 실행하기 위해서 꼭 필요한 jar 파일은 httpclient-4.1.2.jar, httpcore-4.1.2.jar, commons-codec-1.4.jar, commons-logging-1.1.1.jar
요것들 4개고 모두 lib 디렉토리 안에 들어 있음.