본문으로 바로가기
반응형
스프링 부트 1.5.9.RELEASE 버전이라서 httpClient 사용진행 
참고로, Apache HttpClient는 Java 11부터는 deprecated 되어
Java 11 이상의 버전에서는 java.net.http.HttpClient를 사용하는 것이 권장
2.x  이상의 경우는 webClient 사용권장

 

1. 의존성 추가하기 ( 테스트 코드는 밑에 있음)

Maven Pom.xml

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


Gradle build.gradle

dependencies {
    implementation 'org.apache.httpcomponents:httpclient:4.5.13'
}

 

2. HttpClient 인스턴스 생성

CloseableHttpClient httpClient = HttpClients.createDefault();

 

3. Http 요청 구성하기

Get
HttpGet httpGet = new HttpGet("http://example.com/api/resource");

Post
HttpPost httpPost = new HttpPost("http://example.com/api/resource");
httpPost.setEntity(new StringEntity("request body"));

header (옵션)
httpGet.addHeader("Authorization", "Bearer your_token");

 

4. 요청실행

CloseableHttpResponse response = httpClient.execute(httpGet);

 

5. 응답처리

try {
    int statusCode = response.getStatusLine().getStatusCode();
    HttpEntity entity = response.getEntity();
    String responseBody = EntityUtils.toString(entity);

    // 응답 처리 로직 작성
    // statusCode, responseBody 등을 활용
} catch(Exception e) {

}
finally {
    response.close();
}

 

6. httpClient 인스턴스 닫기

httpClient.close();

 

 

- 요청 테스트 최종 코드 

인터페이스 및 서비스 단만 처리 

인터페이스
public interface SendMessage {
    returnCode sendMessageService(String sendId, String sendName, List<String> receiveIds, String sendTitle, String sendMessage) throws Exception;
}

서비스
@Service
public class SendMessageServiceImpl implements SendMessage {
  
    @Override
    public returnCode sendMessageService(String sendId, String sendName, List<String> receiveIds, String sendTitle, String sendMessage) throws Exception {

        returnCode returnCode = returnCode.SUCCESS;

        String sendDNS = "http://test.com";
        String testURL = "http://127.0.0.1:8080/views/test/testURL.jsp";

        //HttpClient 인스턴스 생성하기
        CloseableHttpClient httpClient = HttpClients.createDefault();

        URIBuilder uriBuilder = new URIBuilder(testURL);

        sendId      = (sendId == null)      ? "testId"        : sendId;
        sendName    = (sendName == null)    ? "testName"      : sendName;
        sendTitle   = (sendTitle == null)   ? "testTitle"     : sendTitle;
        sendMessage = (sendMessage == null) ? "testMessage"   : sendMessage;

     
        uriBuilder.setParameter("sendId", sendId);
        uriBuilder.setParameter("sendName", sendName);

        StringBuilder receiveIdBuilder = new StringBuilder();

		// receiveIds 를 여러개 받아 처리 (리스트사용)
		//receveId 가 여러개이기 때문에 ; 로 구분하기 위함
        for (String receiveId : receiveIds) {
            if (receiveIds.size() > 1) {
                receiveIdBuilder.append(receiveId).append(";");
            } else {
                receiveIdBuilder.append(receiveId);
            }
        }

        String appendReceiveIds = String.valueOf(receiveIdBuilder);

        if (!appendReceiveIds.isEmpty()) {
            if (receiveIds.size() > 1) {
                appendReceiveIds = appendReceiveIds.substring(0, appendReceiveIds.length() - 1);
            }
            uriBuilder.setParameter("receiveId", appendReceiveIds);
        }

        uriBuilder.setParameter("sendTitle", sendTitle); 
        uriBuilder.setParameter("sendMessage", sendMessage);

        URI uri = uriBuilder.build();

        //System.out.println("URI : " + uri);
        HttpGet httpGet = new HttpGet(uri);

        //System.out.println("HTTPGET : " + httpGet);
        //요청 실행
        CloseableHttpResponse response = httpClient.execute(httpGet);

        try {
            //응답 상태 코드 확인
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String responseString = EntityUtils.toString(entity, "UTF-8");
                System.out.println(responseString);
            } else {
                returnCode = returnCode.INVALID_DATA;
            }
        } catch (Exception e) {

        } finally {
            //응답 및 httpClient close
            response.close();
            httpClient.close();
        }

        return returnCode;
    }

}

 

- 응답 테스트 testURL.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>받은 데이터</h1>
<p>보내는 ID: <%= request.getParameter("sendId") %></p>
<p>보내는 이름: <%= request.getParameter("sendName") %></p>
<p>받는 ID: <%= request.getParameter("receiveId") %></p>
<p>보내는 제목: <%= request.getParameter("sendTitle") %></p>
<p>보내는 메시지: <%= request.getParameter("sendMessage") %></p>
</body>
</html>
반응형