상세 컨텐츠

본문 제목

Java HttpClient 예제 (curl명령어 Java 변환)

프로그램 언어/Java

by husks 2023. 2. 7. 11:30

본문

반응형

두레이 (https://dooray.com/main/) 라는 협업 툴이 있습니다.


해당 툴을 사용해서 회원에게 메시지를 보내는 API 연동을 개발 하였습니다.

API문서는 아래와 같습니다.

https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2937064454837487755?_ga=2.150447158.1624317303.1673824825-1045995283.1665044340 

 

Dooray-가이드

 

helpdesk.dooray.com

그중 "메신저 1:1 메시지 전송 API" 을 참고하였습니다.

curl -H 'Authorization: dooray-api {TOKEN}' -H 'Content-Type: application/json' -d '{"text":"Hello World","organizationMemberId":"{ORGANIZATION_MEMBER_ID}"}' https://api.dooray.com/messenger/v1/channels/direct-send

curl로 테스트 하도록 되어 있는 부분을 Java의 HttpClient로 구현해 보았습니다.

​하지만 굳이 Dooray 가 아니더라도 curl을 HttpClient로 구현하고 싶은분은 해당 소스를 확인하시면 됩니다.

일단 HttpClient 관련 jar를 다운받거나 maven에 라이브러리 추가 해줘야 합니다.

해당 jar파일 입니다. 다운로드 받으세요.

commons-codec-1.10.jar
0.27MB
commons-logging-1.1.3.jar
0.06MB
httpclient-4.5.13.jar
0.74MB
httpcore-4.4.9.jar
0.31MB

이메일을 조건으로 아이디를 조회합니다.

 

아이디로 메시지를 보낼수 있기 때문입니다.

 

get방식으로 아이디를 조회하고 post방식으로 메시지를 보냅니다.

 

소스를 참고 하시고 필요한 부분은 주석을 달았습니다.

import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.CloseableHttpResponse;
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.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.simple.parser.JSONParser;
import org.springframework.util.StringUtils;

public class CallUrl {

  public static void main(String[] args) {
    
    String id = "id"; //아이디
    String pw = "pw"; //패스워드
    String certification = id+":"+pw; //두레이 발급코드를 자세히 보면 : 구분자로 아이디 패스워드가 붙어있음
    //필요하다면 Base64로 인코딩, 해당 API에서 인코딩 하면 에러가 발생하여 생략
    //String encodedValue = Base64.encodeBase64String(certification.getBytes());
    
    //아이디 검색을 위한 URL
    String getInfoUrl = "https://api.dooray.com/common/v1/members?externalEmailAddresses=";
    String searchInfo = "test@test.co.kr";
    
    //메시지를 보내기 위한 URL
    String sendMessageUrl = "https://api.dooray.com/messenger/v1/channels/direct-send";
    String text = "Hello World 한글테스트";
    String organizationMemberId = "";

    try {
      
      getInfoUrl = getInfoUrl+searchInfo; //메시지 전송을 위해 회원 아이디를 이메일로 검색 하는 URL
      
      HttpGet httpGet = new HttpGet(getInfoUrl); //조회는 get방식
      String authorization = "dooray-api "+certification; //dooray-api 대신 기본 인증이면 Base 사용
      httpGet.setHeader("Authorization", authorization); //인증
      httpGet.setHeader("Content-Type", "application/json"); //Content-Type 설정
      
      CloseableHttpClient httpClient = HttpClientBuilder.create().build();
      CloseableHttpResponse response = httpClient.execute(httpGet);
      
      //HTTP 상태 코드
      int statusCode = response.getStatusLine().getStatusCode();
      
      if (statusCode == 200) {

        ResponseHandler<String> handler = new BasicResponseHandler();
        String responseBody = handler.handleResponse(response);
        
        System.out.println(responseBody); //응답
        
        JSONParser jsonParser = new JSONParser();
        //응답받아서 json파서로 아이디 추출
        org.json.simple.JSONObject jsonObj = (org.json.simple.JSONObject) jsonParser.parse(responseBody);
        org.json.simple.JSONArray resultArray = (org.json.simple.JSONArray) jsonObj.get("result");
        
        for (int i = 0; i < resultArray.size(); i++) {
          org.json.simple.JSONObject resultObject = (org.json.simple.JSONObject) resultArray.get(i);
          organizationMemberId = (String) resultObject.get("id"); //아이디 추출
        }
        
        if(!StringUtils.isEmpty(organizationMemberId)) { //아이디가 널이 아니면
          
          HttpPost httpPost = new HttpPost(sendMessageUrl); //메시지는 post방식      

          httpPost.setHeader("Authorization", authorization); //인증
          httpPost.setHeader("Content-Type", "application/json"); //Content-Type 설정

          String entity = "{\"text\":\""+text+"\",\"organizationMemberId\":\""+organizationMemberId+"\"}"; //entity값 설정 문자, 아이디
          httpPost.setEntity(new StringEntity(entity, "UTF-8")); //한글깨짐 방지 UTF-8

          httpClient = HttpClientBuilder.create().build();
          response = httpClient.execute(httpPost);
          
          //HTTP 상태 코드
          statusCode = response.getStatusLine().getStatusCode();
          
          if (statusCode == 200) { //성공
            handler = new BasicResponseHandler();
            responseBody = handler.handleResponse(response);
          }else {
            System.out.println("statusCode ==> "+statusCode);
          }
        }

        System.out.println(responseBody);
      }else {
        System.out.println("statusCode ==> "+statusCode);
      }
      
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }

}
반응형

관련글 더보기

댓글 영역