업무 중 외부 API를 호출해야할 일이 생겼다.
request 에 여러가지 데이터를 함께 보내주어야 하고,
호출 후 모든 조건을 충족하여 response가 200 OK일 경우 파일 스트림을 반환하는 조건이 있었다.
파일 스트림을 받아와서 서버에 저장까지!
JAVA로 API를 호출하는 방식은 굉장히 여러가지 방법이 있지만,
이번엔 HttpClient 인터페이스의 구현클래스인 CloseableHttpClient 를 사용하기로 했다.
import org.apache.commons.io.FileUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
public void CallApi() throws Exception {
// API 호출을 위한 HttpClient 생성
CloseableHttpClient client = HttpClientBuilder.create().build();
// POST 통신을 위해 생성
HttpPost postRequest = new HttpPost("호출 URL");
// 기본 header 설정
postRequest.setHeader("Accept", "application/octet-stream,application/json");
postRequest.setHeader("Connection", "keep-alive");
postRequest.setHeader("Content-Type", "application/json");
// 필요한 request header 추가
postRequest.addHeader("header1Key", "header1Value");
// request body 파라미터 추가
String requestBody = "{\"alcohol\\": {\"soju\": \"참이슬\",\"beer\": \"테라\"},\"snack\": {\"pizza\": \"peperoni\"}}";
postRequest.setEntity(new StringEntity(requestBody));
// API 호출
CloseableHttpResponse response = client.execute(postRequest);
// 파일 경로 지정
String path = new File(".").getAbsoluteFile();
// 파일로 저장
InputStream is = response.getEntity().getContent();
// 저장되는 파일 명
String res = "test.db";
// 파일 저장
FileUtils.copyInputStreamToFile(is,new File(path+res));
client.close();
}