본문 바로가기
Java

html/xml body response inputstream parsing / example

by nomore7 2015. 1. 11.


http패킷을 보내고 간단히 결과를 출력하는 내용을 구현하고 있었는데,


돌아오는 패킷에서 결과가 http protocol  이 아닌 http/xml 패킷으로 돌아왔다.


패킷을 떠보니 http protocol 부분바깥에 response가 존재했다.


commons-httpclient 의 getResponseBodyAsStream함수로 호출이 가능했다.


library 다운로드 링크

http://hc.apache.org/downloads.cgi


commons-httpclient

commons-logging

commons-codec



샘플 예제는 다음과 같다.


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
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
 
 
 
public class SampleMain {
 
 
    public static void main(String args[]){
        HttpClient client = new HttpClient();
        PostMethod postMethod = new PostMethod("http://localhost/test.do");
        //임의의 요청 URL로 요청
        // GETMethod,PUTMethod,POSTMethod 상황에 따른 요청 방식
        //outputStream대신 setRequestHeader,setRequestBody함수 사용내용 추가.
 
        InputStream is = null;
        BufferedReader br = null;
        String result = "";
        String line = null;
        
        //단순한 스트림 출력내용.
        try {
            int statusCode = client.executeMethod(postMethod);
            if (statusCode == 200) {
                is = postMethod.getResponseBodyAsStream();//zip,xml등을 받도록
                br = new BufferedReader(new InputStreamReader(is));
                while ((line = br.readLine()) != null) {
                    result += line;
                }
            } else {
                System.out.println(statusCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(br != null){
                    br.close();
                }
                if(is != null){
                    is.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
}
 
 
cs