Apache HttpComponents를 이용한 GET, POST 요청하기
Java 2011. 8. 23. 00:47
예전에는 Jakarta Commons HttpClient 프로젝트로 commons 프로젝트들이랑 옹기종기 같이 모여 있었는데 문득 사이트에 가보니
프로젝트명이 Apache HttpComponents 로 바껴있고 라이브러리 사용하는 것도 훅 달라진것 같았다.
테스트겸 겸사겸사 GET, POST 요청을 하는 클래스를 맹글어 보았다.
소스코드
라이브러리 다운로드는 http://hc.apache.org/downloads.cgi 요기에 가서 다운로드 받던지
Maven을 사용하고 있다면 디펜던시에
그리고~ 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 디렉토리 안에 들어 있음.
프로젝트명이 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)); } }
라이브러리 다운로드는 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 디렉토리 안에 들어 있음.