에몽이

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

java

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

ian_hodge 2017. 1. 3. 20:19
왠지 도움이 될것 같은 느낌이 든다면 공감을 *(-_-)*
예전에는 Jakarta Commons HttpClient 프로젝트로 commons 프로젝트들이랑 옹기종기 같이 모여 있었는데 문득 사이트에 가보니 

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

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



소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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을 사용하고 있다면 디펜던시에
1
2
3
4
5
<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 디렉토리 안에 들어 있음.



출처: http://stove99.tistory.com/26 [스토브 훌로구]

Comments