[JAVA] HttpClient 사용하여 외부 API 호출

돈까스전사·2022년 11월 11일
0

업무 중 외부 API를 호출해야할 일이 생겼다.
request 에 여러가지 데이터를 함께 보내주어야 하고,
호출 후 모든 조건을 충족하여 response가 200 OK일 경우 파일 스트림을 반환하는 조건이 있었다.
파일 스트림을 받아와서 서버에 저장까지!
JAVA로 API를 호출하는 방식은 굉장히 여러가지 방법이 있지만,
이번엔 HttpClient 인터페이스의 구현클래스인 CloseableHttpClient 를 사용하기로 했다.


🚩API 호출 조건

  • POST 방식
  • 다수의 헤더 값 추가
  • json 형식의 파라미터 추가
  • 응답 성공 시 파일 스트림 반환

🚩 코드

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();
  
 }
profile
네이버 지식인 ZIZON

0개의 댓글