본문 바로가기
programming/SpringJava

rest api httpurlconnection 사용 get 호출 자바로 만들고 테스트 하기

by 개코 - 개발과 코딩 2021. 3. 12.

이번엔 HttpUrlConnection 라이브러리를 사용하여 rest api 를 호출하려고 한다.
HttpUrlConnection을 사용하여 get 방식으로 호출을 해 보도록 하는 것으로 자바로 만들고 테스트까지 해 보려고 한다.
물론 이전에 했던 호출방법으로 해도 크게 상관이 없지만, 차이가 분명히 있다.
웹서비스를 만들다 보면 알게 되는 내용인데 데이터를 제공해 주는 곳의 서버설정과 관계가 있을 수도 있다. 그렇기에 다 정리해 본다.

HttpUrlConnection get 호출 결과

rest api HttpUrlConnection 사용 get 호출
자바로 만들고 테스트 하기

일전에는 rest api 를 httpclient 를 사용하여 데이터를 가져오는 것을 진행했다.
이전에 작성한 포스팅은 아래를 참고해 본다.

 

2021.03.10 - [programming/java] - rest api httpclient 사용 get 호출 자바로 만들고 테스트 하기

2021.03.11 - [programming/java] - rest api httpclient 사용 post 호출 자바로 만들고 테스트 하기

 

빠르게 개발하기 위한 목적이라면 코드를 확인하고 참고하면 그만이지만, 왜 저렇게 써야 하는지에 궁금할 수 있다. 보인도 아직은 파악하지 않았다. ㅋ
하지만, 모든 코드를 만들어 놓고 나중에 차이점을 파헤쳐 보려고 한다.

 

준비물

이클립스 : 자바 개발을 위한 IDE툴
HttpUrlConnection 라이브러리 : rest api호출을 위한 내부 라이브러리 java.net 에 존재한다.
테스트 데이터 : 테스트를 위해 가짜 데이터가 필요하다.
검색포털에서 test json 검색어로 검색하면 다양한 데이터를 얻을 수 있다.

 

코드 작성

HttpUrlConnection 을 사용하여 get 방식으로 데이터를 불러오는 코드를 작성한다.
눈치 빠른 사람은 알겠지만 HttpUrlConnection 은 자바에서 제공하는 java.net 패키지를 사용한다.
이전에 사용한 HttpClient 는 org.apache.http 패키지를 사용했다.
한가지 차이를 발견했다. 하지만 외부라이브러리가 존재한다는 것은 기존에 제공하는 것에 불편함이 있거나 뭔가를 개선했다고 예상할 수 있지만, 지금은 무시하자.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class RestApi_HttpURLConnection_Get_JavaTest {

	public static void main(String[] args) {
		
		System.out.println("\n");
		System.out.println(" 시작 : HttpURLConnection사용 Get방식 Rest API 테스트 -----");
		
		//--------------------------------------------------
		
		try {
			
			StringBuilder vStringBuilder = new StringBuilder();
			String vStringLine;
			
			URL vURL = new URL("https://reqres.in/api/users?page=2");
			HttpURLConnection vHttpURLConnection = (HttpURLConnection) vURL.openConnection();
			
			vHttpURLConnection.setConnectTimeout(5000);
			vHttpURLConnection.setReadTimeout(5000);
			vHttpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0");
			vHttpURLConnection.addRequestProperty("", "");
			vHttpURLConnection.setRequestMethod("GET");
			vHttpURLConnection.setDoOutput(true);

			if (vHttpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
				 
				BufferedReader vBufferedReader = new BufferedReader(
					new InputStreamReader(vHttpURLConnection.getInputStream(), "utf-8")
				);
				
				while ((vStringLine = vBufferedReader.readLine()) != null) {
					vStringBuilder.append(vStringLine).append("\n");
				}
				
				vBufferedReader.close();
				
				System.out.println("\n");
				System.out.println("요청 성공");
				System.out.println("\t" + vHttpURLConnection.getResponseCode());
				System.out.println("\t" + vHttpURLConnection.getResponseMessage());
				System.out.println("\t" + vStringBuilder.toString());
				
			} else {
				
				System.out.println("\n");
				System.out.println("요청 실패");
				System.out.println("\t" + vHttpURLConnection.getResponseCode());
				System.out.println("\t" + vHttpURLConnection.getResponseMessage());
				System.out.println("\t" + vStringBuilder.toString());
				
			}

		} catch (Exception ex){
			
			System.out.println("ex : " + ex.toString());
			
		}
		
		//--------------------------------------------------
		
		System.out.println("\n");
		System.out.println("종료 : HttpURLConnection사용 Get방식 Rest API 테스트 -----");
	}
}

복잡해 보인다.
HttpUrlConnection 을 사용하기 위한 패키지가 다르지만, HttpClient 를 사용한 것과 차이가 없다.
단지 추가된 라이브러리가 있다면 BufferedReader 를 사용했고, BufferedReader 에서 읽은 내용을 다시 문자열로 만들기 위해 StringBuilder 를 사용했다는 점이다.
여기서도 HttpClient 와의 다른 차이를 볼 수 있다.
일단, 무시하자.
코드를 간략화해서 살펴보기 위해 필요없은 출력문을 없애보도록 한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class RestApi_HttpURLConnection_Get_JavaTest {

	public static void main(String[] args) {
		
		System.out.println("\n");
		System.out.println(" 시작 : HttpURLConnection사용 Get방식 Rest API 테스트 -----");
		
		//--------------------------------------------------
		
		try {
			
			StringBuilder vStringBuilder = new StringBuilder();
			String vStringLine;
			
			URL vURL = new URL("https://reqres.in/api/users?page=2");
			HttpURLConnection vHttpURLConnection = (HttpURLConnection) vURL.openConnection();
			
			vHttpURLConnection.setConnectTimeout(5000);
			vHttpURLConnection.setReadTimeout(5000);
			vHttpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0");
			vHttpURLConnection.addRequestProperty("", "");
			vHttpURLConnection.setRequestMethod("GET");
			vHttpURLConnection.setDoOutput(true);

			if (vHttpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
				 
				BufferedReader vBufferedReader = new BufferedReader(
					new InputStreamReader(vHttpURLConnection.getInputStream(), "utf-8")
				);
				
				while ((vStringLine = vBufferedReader.readLine()) != null) {
					vStringBuilder.append(vStringLine).append("\n");
				}
				
				vBufferedReader.close();
				
			} else {
            }

		} catch (Exception ex){
        }
		
		//--------------------------------------------------
		
		System.out.println("\n");
		System.out.println("종료 : HttpURLConnection사용 Get방식 Rest API 테스트 -----");
	}
}

필요없는 구문을 제거했을 때 보이는 것들 또한 단순하다.
하지만 추가된 다른 메서드들이 있다는 것을 확인하자.
어차피, HttpClient 와 결과는 같다.

반응형

댓글