본문 바로가기
JAVA

[ JAVA ] Apache Commons 의 HttpClient 사용법

by 정윤재 2012. 2. 19.

자바에서는 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
  }
     
     
  
 }
}



댓글