HttpClient 사용하기

HttpClient 사용하기

HttpClient 는 Apache에서 제공하는 라이브러리로 HTTP 를 사용하는 통신에 손쉽게 자원을 요청하고 응답받을 수 있게 도와준다.

// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.4'

Back-end Controller

HttpClient 를 사용해 요청 테스트를 진행하기 위한 서버 Controller를 생성한다.

@RestController
public class HttpClientBackend {

@PostMapping("/hello")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public String hello(){
return "Hello World!";
}
}

HttpClient 객체 가져오기

  • HttpClient 객체를 가저오는 방법은 HttpClients 클래스에서 제공하는 createDefault 메소드를 이용하는 방법과 HttpClientBuilder 를 이용한 방법이 있다.
  • createDefault 내부를 보면 HttpClientBuilder 를 이용해 HttpClient 객체를 가져오기 때문에 사실상 똑같다.
CloseableHttpClient client = HttpClients.createDefault();
CloseableHttpClient client2 = HttpClientBuilder.create().build();

Post 요청을 위한 HttpPost 객체 생성

  • HttpPost를 이용해 Post 요청보내기 위한 요청 객체를 생성한다.
  • 객체를 만들때 요청을 보내기 위한 요청 URL을 넣어준다.
HttpPost httpPost = new HttpPost("http://localhost:8080/hello");

요청 후 응답 객체 받아오기

  • HttpClient 객체의 execute 메소드를 이용해 서버 측으로 요청을 보낸다.
  • execute 메소드의 매게변수로 생성한 요청 객체 (HttpGet, HttpPost, HttpPut, HttpPatch) 를 넣어준다.
CloseableHttpResponse response = client.execute(httpPost);

응답 값 가져오기

  • 응답 객체로부터 입력 스트림 을 가져와 값을 읽어온다.
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

전체 소스 코드

@SpringBootApplication
public class JavaHttpclientApplication {

public static void main(String[] args) throws IOException {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/hello");
CloseableHttpResponse response = client.execute(httpPost);

System.out.println("============================ body =============================");

String inputLine;
StringBuffer result = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

while ((inputLine = br.readLine()) != null) {
result.append(inputLine);
}

System.out.println(result);

System.out.println("============================ body =============================");

br.close();
client.close();
}
}

HttpClient Fluent API 사용하기

Fluent API 를 이용하면 조금더 쉽고 간편하고 직관적으로 HTTP 요청을 할 수 있다.

라이브러리 추가

implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.4'
// https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc
implementation group: 'org.apache.httpcomponents', name: 'fluent-hc', version: '4.3.4'
}

서버측에 요청하고 응답 받기

Fluent API 에서 제공하는 Request 를 이용하면 요청 객체를 따로 생성할 필요 없이 간편하게 요청하고 실행해 응답값을 받아올 수 있다.

HttpResponse response = Request
.Post("http://localhost:8080/hello")
.execute()
.returnResponse();

전체 소스 코드

public class JavaHttpClientFluentApi {
public static void main(String[] args) throws IOException {
HttpResponse response = Request
.Post("http://localhost:8080/hello")
.execute()
.returnResponse();

String line;
StringBuilder stringBuilder = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
while((line = br.readLine()) != null){
stringBuilder.append(line);
}

System.out.println("=========================== start ============================");
System.out.println("Status Code: " + response.getStatusLine().getStatusCode());
System.out.println("Content: " + stringBuilder.toString());
System.out.println("============================ end =============================");
}
}

참고 사이트

https://www.baeldung.com/httpclient4

Share