Java HttpUrlConnection 으로 통신하기 / 파일 전송 및 수신

2017.09.28 10:46language/java


Java HttpUrlConnection 으로 통신하기 / 파일 전송 및 수신 내용 참고

 

 

 

Java에서 특정 웹 사이트나 url을 호출하여 xml이나 json 방식을 리턴받아 사용할 경우가 있다.

 

restful 방식이나 openAPI 방식을 사용할 때 도 역시 필요하고

 

웹 크롤링을 할 경우에도 사용할 수 있다.

 

이번 포스팅은 파일을 전송받기 위해서 만들어 놓았던 간단한 http 통신을 하는 예제이다.

꼭 파일을 전송받기 위한 것이 아니라 Json, xml, text 등 다양하게 활용 가능하도록 포인트를 적어 두었다.

 



 

즉, 아래 예제는 특정 url을 호출하여 제공되는 정보를 가져오는 방법이다.

 


본 포스팅과 바이너리 변환 방법 포스팅을 참고하면 http 통신으로 파일을 주고 받을 수 있는 모듈을 만들 수 있다.


 

 

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
public String httpConnection(String targetUrl) {
    URL url = null;
    HttpURLConnection conn = null;
    String jsonData = "";
    BufferedReader br = null;
    StringBuffer sb = null;
    String returnText = "";
 
    try {
        url = new URL(targetUrl);
 
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Accept""application/json");
        conn.setRequestMethod("GET");
        conn.connect();
 
        br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
 
        sb = new StringBuffer();
 
        while ((jsonData = br.readLine()) != null) {
            sb.append(jsonData);
        }
 
        returnText = sb.toString();
 
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null) br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    return returnText;
}
cs

1# : http 통신을 하는 함수이다. 파라미터로 호출할 url 주소를 받는다.

2# : Url 객체이다.

3# : 통신할 HttpURLConnection 객체이다.

10# : 전달받은 url string 으로 URL 객체를 만든다.

12# : URL 객체로 connection 을 만든다.


13# : 해더 타입이다. 호출하려는 곳과 해더 타입이 맞지 않으면 오류가 발생한다. 호출하려는 곳에서 xml,  json, html, text 등 리턴하는 타입을 확인하여 작성하여야 한다.

14# : 요청메소드이다. get이나 post 등 해당하는 메소드를 입력한다.

15# : 실제로 연결하는 부분이다.

17# : 결과를 InputStream으로 받아서 INputStreamReader, BufferedReader로 캐스팅한다.

21# : 전달받은 BufferedReader을 StringBuffer에 담는다.

25# : StringBuffer을 String으로 캐스팅한다. 여기서 캐스팅 된 String은 13#에서 선언한 타입과 일치한다.

각각 타입에 맞게 활용할 수 있다. Json이면 컬랙션으로, xml이면 Dom 객체로, 기타 Binary String이면 파일로...

본 예제는 Json으로 선언되어 있기 때문에 Json, text, Bynary String 등 일반 문자열들을 전달 받는다.