투케이2K

112. (spring/스프링) okhttp 사용해 post 방식 query string 쿼리스트링 요청 실시 본문

Spring

112. (spring/스프링) okhttp 사용해 post 방식 query string 쿼리스트링 요청 실시

투케이2K 2022. 10. 11. 12:00

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[소스 코드]

package com.kwon.mssqltestproject;

import okhttp3.*;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public class C_Okhttp {


    /**
     * // -----------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. okhttp 네트워크 요청 클래스
     * // -----------------------------------------
     * 2. 필요 build.gradle 설정 :
     *
     * implementation("com.squareup.okhttp3:okhttp:4.9.1")
     * // -----------------------------------------
     * */





    /**
     * // -----------------------------------------
     * // TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------
     * // [SEARCH FAST] : [POST 쿼리 스트링 요청 실시]
     * // -----------------------------------------
     * */





    // TODO [전역 변수 선언]
    private static final String CLASS_NAME = "C_Okhttp";
    public static final String RES_SUCCESS = "RES_SUCCESS";
    public static final String RES_STATUS = "RES_STATUS";
    public static final String RES_HEADER = "RES_HEADER";
    public static final String RES_DATA = "RES_DATA";





    // TODO [SEARCH FAST] : [POST 쿼리 스트링 요청 실시]
    public static Map<String, Object> post(String url, Map<String, Object> data){
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("post"));
        System.out.println("[URL] : "+String.valueOf(url));
        System.out.println("[DATA] : "+String.valueOf(data));
        System.out.println("================================================");
        System.out.println("\n");


        /**
         * // -----------------------------------------
         * // TODO [호출 방법]
         * // -----------------------------------------
         * String url = "http://jsonplaceholder.typicode.com/posts?";
         *
         * Map params = new HashMap();
         * params.put("userId",1);
         * params.put("id",1);
         *
         * Map response = C_Okhttp.post(url, params);
         * // -----------------------------------------
         * */


        // [초기 리턴 데이터 선언 실시]
        Map<String, Object> returnData = new HashMap<>();
        String urlData = String.valueOf(url.replaceAll(" ", ""));
        String paramData = "";


        // [로직 처리 실시]
        try {

            // [사전 주소 형식 체크 실시]
            if (urlData != null && urlData.isEmpty() == false && urlData.length() > 0
                    && urlData.trim().equals("") == false && urlData.trim().equals("null") == false
                    && urlData.startsWith("http") == true){ // [널 아님]
            }
            else {
                System.out.println("\n");
                System.out.println("================================================");
                System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
                System.out.println("[METHOD] : "+String.valueOf("post"));
                System.out.println("[ERROR] : "+String.valueOf("url is null"));
                System.out.println("[RETURN] : "+String.valueOf(returnData));
                System.out.println("================================================");
                System.out.println("\n");

                // [리턴 반환]
                return returnData;
            }


            // [쿼리 스트링 데이터 널 여부 체크 실시]
            if (data != null && data.isEmpty() == false && data.size()>0){ // [널 아님]

                if (urlData.endsWith("?") == true){ // [물음표 추가]
                }
                else {
                    urlData = urlData + "?";
                }

                // [map 데이터 key, value 확인]
                Set set = data.keySet();
                Iterator iterator = set.iterator();
                while(iterator.hasNext()){
                    if (paramData.length()>0){
                        paramData += "&";
                    }
                    String key = (String) iterator.next();
                    String value = String.valueOf(data.get(key));

                    // [쿼리스트링에 순차적으로 삽입 실시]
                    paramData += URLEncoder.encode(key, "UTF-8");
                    paramData += "=";
                    paramData += URLEncoder.encode(value, "UTF-8");
                }
            }


            // [ok http 요청 실시]
            String urlTotal = urlData + paramData;

            System.out.println("\n");
            System.out.println("================================================");
            System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
            System.out.println("[METHOD] : "+String.valueOf("post"));
            System.out.println("[REQUEST] : "+String.valueOf(urlTotal));
            System.out.println("================================================");
            System.out.println("\n");

            OkHttpClient client = new OkHttpClient.Builder()
                    .connectTimeout(20, TimeUnit.SECONDS)
                    .writeTimeout(20, TimeUnit.SECONDS)
                    .readTimeout(20, TimeUnit.SECONDS)
                    .retryOnConnectionFailure(false)
                    .build();

            Request request = new Request.Builder()
                    .url(urlTotal)
                    .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;")
                    .addHeader("Cache-Control", "no-cache")
                    .post(new FormBody.Builder().build())
                    .build();


            // [동기 요청 실시]
            Call call = client.newCall(request);
            Response response = call.execute();

            if (response.code() >= 200 && response.code() < 300){
                returnData.put(RES_SUCCESS, true);
            }
            else {
                returnData.put(RES_SUCCESS, false);
            }

            returnData.put(RES_STATUS, response.code());
            //returnData.put(RES_HEADER, response.headers());
            returnData.put(RES_DATA, response.body().string());
        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [로그 결과 출력]
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("post"));
        System.out.println("[RESPONSE] : "+String.valueOf(returnData));
        System.out.println("================================================");
        System.out.println("\n");


        // [리턴 결과 반환 실시]
        return returnData;


    }


} // [클래스 종료]
 

[결과 출력]


반응형
Comments