이번엔 HttpUrlConnection 라이브러리를 사용하여 rest api 를 호출하려고 한다.
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 와 결과는 같다.
'programming > SpringJava' 카테고리의 다른 글
자바 프로젝트를 메이븐 프로젝트 변환하기 How to convert Java Project to Maven Project (0) | 2021.03.19 |
---|---|
자바 현재 날짜와 시간 표시 형식 지정하기 (0) | 2021.03.14 |
rest api httpurlconnection 사용 post 호출 자바로 만들고 테스트 하기 (0) | 2021.03.13 |
rest api httpclient 사용 post 호출 자바로 만들고 테스트 하기 (0) | 2021.03.11 |
rest api get 방식 자바로 만들기 테스트 하기 (0) | 2021.03.10 |
댓글