본문 바로가기
programming/SpringJava

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

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

rest api 를 호출하는 방법 중 post 방식을 사용하는 방법도 있다.
httpclient 를 사용하여 post 방식으로 데이터를 호출해 보도록 하자.

저번에는 httpclient 를 사용하여 get 방식으로 데이터를 불러오는 것을 했다.

 

2021.03.10 - [programming/java] - rest api get 방식 자바로 만들기 테스트 하기

 

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

이전과 거의 비슷한 코드가 만들어질 것이지만, 차이가 나는 것은 post 방식으로 데이터를 가져오는 것이다.
이것 또한 요청을 받은 서버에서 post 형식을 받을 수 있는지 설정이 되어 있다면 가능하다.

준비물

이클립스 : 자바 개발을 위한 IDE툴
메이븐 ( maven ) : 외부 라이브러리를 클래스를 사용
httpclient 라이브러리 : rest api 호출을 위한 외부 라이브러리

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.4</version>
</dependency>

테스트 데이터 : 테스트를 위해 가짜 데이터가 필요하다.
검색포털에서 test json 검색어로 검색하면 다양한 테스트 데이터를 얻을 수 있다.

 

자바 메이븐 프로젝트 만들기

자바 개발툴인 이클립스를 실행하고 메이븐 프로젝트 만든다.
메이븐 프로젝트가 아닌 일반 자바 프로젝트로 만들었다면 프로젝트 속성에서 메이븐 프로젝트로 변경할 수 있다.

 

코드 작성

httpclient 사용하여 post 방식을 이용한 테스트 코드를 작성한다.
위에서 언급한 이전자료의 차이라면 httpget 이 아닌 httppost 를 사용한 점이다.
그리고 성공 코드인 200 코드 외에 추가로 201 코드 처리를 하였다.
201 또한 성공을 의미하지만, 새로 생성된 문서일 수 있다.

import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.HttpClientBuilder;

public class RestApi_HttpClient_Post_JavaTest {

	public static void main(String[] args) {
		
		System.out.println("\n");
		System.out.println(" 시작 : HttpClient사용 Post방식 Rest API 테스트 -----");
		
		//--------------------------------------------------
		
		try {
			
			String vResponseMessage = ""; 
			
			//URI vUri = new URI("https://jsonplaceholder.typicode.com/postsXPXP");
			URI vUri = new URI("https://reqres.in/api/users");
			
			HttpClient vHttpClient = HttpClientBuilder.create().build();
			HttpPost vHttpPost = new HttpPost(vUri); 
			vHttpPost.setHeader("", "");
			vHttpPost.addHeader("", ""); 
	
			vHttpPost.setEntity(new StringEntity(vResponseMessage)); 
	
			HttpResponse vHttpResponse = vHttpClient.execute(vHttpPost);
	
			//Response 출력
			if (vHttpResponse.getStatusLine().getStatusCode() == 200) {
				
				ResponseHandler<String> vResponseHandler = new BasicResponseHandler();
				String vResponse = vResponseHandler.handleResponse(vHttpResponse);
				
				System.out.println("\n");
				System.out.println("요청 성공");
				System.out.println("\t" + vHttpResponse.getStatusLine().getStatusCode());
				System.out.println("\t" + vHttpResponse.getStatusLine().getReasonPhrase());
				System.out.println("\t" + vResponse);
				
			} else if (vHttpResponse.getStatusLine().getStatusCode() == 201)  {
				
				ResponseHandler<String> vResponseHandler = new BasicResponseHandler();
				String vResponse = vResponseHandler.handleResponse(vHttpResponse);
				
				System.out.println("\n");
				System.out.println("요청 성공");
				System.out.println("\t" + vHttpResponse.getStatusLine().getStatusCode());
				System.out.println("\t" + vHttpResponse.getStatusLine().getReasonPhrase());
				System.out.println("\t" + vResponse);
				
			} else {
				
				System.out.println("\n");
				System.out.println("요청 실패");
				System.out.println("\t" + vHttpResponse.getStatusLine().getStatusCode());
				System.out.println("\t" + vHttpResponse.getStatusLine().getReasonPhrase());
			}

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

복잡해 보이지만 별거 없다.
처리결과를 확인하기 위해 출력문을 제거하면 볼품없다.
하지만 처리결과의 201 코드가 있다는 것에 주의하자.
해당 코드의 처리는 성공이며, 문서가 새로 생겼음을 의미하기도 한다.

import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.HttpClientBuilder;

public class RestApi_HttpClient_Post_JavaTest {

	public static void main(String[] args) {
		
		//--------------------------------------------------
		
		try {
			
			String vResponseMessage = ""; 
			
			//URI vUri = new URI("https://jsonplaceholder.typicode.com/postsXPXP");
			URI vUri = new URI("https://reqres.in/api/users");
			
			HttpClient vHttpClient = HttpClientBuilder.create().build();
			HttpPost vHttpPost = new HttpPost(vUri); 
			vHttpPost.setHeader("", "");
			vHttpPost.addHeader("", ""); 
	
			vHttpPost.setEntity(new StringEntity(vResponseMessage)); 
	
			HttpResponse vHttpResponse = vHttpClient.execute(vHttpPost);
	
			//Response 출력
			if (vHttpResponse.getStatusLine().getStatusCode() == 200) {
				
				ResponseHandler<String> vResponseHandler = new BasicResponseHandler();
				String vResponse = vResponseHandler.handleResponse(vHttpResponse);
				
			} else if (vHttpResponse.getStatusLine().getStatusCode() == 201)  {
				
				ResponseHandler<String> vResponseHandler = new BasicResponseHandler();
				String vResponse = vResponseHandler.handleResponse(vHttpResponse);
				
			} else {
            }

		} catch (Exception ex){
		}
		
		//--------------------------------------------------
	}
}

이 정도면 rest api 를 이용한 앱이나 웹서비스를 만들 수 있는 기초적인 코드가 생겼다.
get 방식, post 방식의 2개가 있으면 된다.
여기까지 httpclient 를 이용한 res api 데이터를 가져오는 것을 해 보았지만, 이 외에도
httpconnection 을 이용한 방법도 있다.
이것 또한 get 방식 post 방식이 있기에 여기까지 다 다뤄보려고 한다.

반응형

댓글