Apache HttpComponents를 이용한 GET, POST 요청하기
Java 2011/08/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 디렉토리 안에 들어 있음.
HttpProxy.java






