자바에서는 URL 클래스와 URLConnection 클래스를 이용해서 http 통신을 할 수 있는데
안드로이드에서는 commons 의 HttpClient (interface)를 구현한 DefaultHttpClient 를 가지고 http 통신을 구현하는 모양 이다. 안드로이드 개발자 분과 통신을 하다보니
이 클래스가 오픈 소스여서 자바에서도 사용 가능하기 때문에 사용법을 정리 하여 보았다.
API 는 http://hc.apache.org/httpclient-3.x/ 에서 다운 받을 수 있다.
사용법은 예제로 정리 하겠다.
여담으로 인터넷에는 왜 이렇게 안돌아가는 소스가 많은건지... interface 를 new 해서 객체로
만들지 않나... 하여간 말도 안되는 소스들이 많아서 힘들어 하는 개발자들을 더 힘들게
하는것 같다.... 아래 소스는 제가 실행 해 본 소스 이므로 갈길 바쁘신 분들께
도움이 되길 바랍니다.
package test;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpCookie;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
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.conn.ClientConnectionManager;
import org.apache.http.conn.ClientConnectionRequest;
import org.apache.http.conn.ManagedClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.SchemeSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.params.SyncBasicHttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
public class HttpTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpParams params = new SyncBasicHttpParams();
HttpClient httpClient = new DefaultHttpClient(params);
InputStream in = null;
StringBuffer sb = new StringBuffer();
try{
HttpPost httpPost = new HttpPost("http://211.63.6.75:8084/cms_developer_poc/product/CategoryList");
//HttpGet httpPost = new HttpGet("http://211.63.6.75:8084/cms_developer_poc/product/CategoryList?CONTENT_CATEGORY_ID=cat12011616290669");
// if get method use
//****************************************
//header setting
//****************************************
httpPost.addHeader("user-agent","incross0101");
Header[] reqHeaders = httpPost.getAllHeaders();
for(int i=0;i<reqHeaders.length;i++){
System.out.println("request header::"+reqHeaders[i].getName()+"::::"+reqHeaders[i].getValue());
}
//**************************************************
//body parameter setting(only post method)
List<NameValuePair> pair = new ArrayList<NameValuePair>();
new BasicNameValuePair("CONTENT_CATEGORY_ID", "cat12011616290669");
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(pair,HTTP.UTF_8);
httpPost.setEntity(ent);
//**************************************************
//**************************************************
//resonse header setting
HttpResponse response = httpClient.execute(httpPost);
Header[] resHeaders = response.getAllHeaders();
for(int i=0;i<resHeaders.length;i++){
System.out.println("response header::"+resHeaders[i].getName()+"::::"+resHeaders[i].getValue());
}
//**************************************************
HttpEntity responseEntity = response.getEntity();
in = responseEntity.getContent();
if(response.getStatusLine().getStatusCode()==200){
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String line = "";
while((line = reader.readLine())!=null){
sb.append(line+"\n");
}
in.close();
}else{
System.out.println("error : "+response.getStatusLine().getStatusCode());
}
System.out.println(sb.toString());
if(in!=null){
in.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
httpClient.getConnectionManager().shutdown();
//connection close
}
}
}
'JAVA' 카테고리의 다른 글
[ JAVA ] netty (비동기 이벤트 방식 네트워크 프레임워크) 사용법 1 ( server ) (3) | 2012.04.04 |
---|---|
[ JAVA ] printStackTrace 를 String 형으로 표현 (log4j 등에 사용 가능) (0) | 2012.02.20 |
[ JAVA ] XML 만들기 (0) | 2012.01.18 |
[ JAVA ] String 두개 XOR 연산 (0) | 2011.10.19 |
[ JAVA ] 자바 쓰레드 풀(Thread Pool) 구현 (0) | 2011.10.17 |
댓글