Rest(okhhtp)

PHOTO EMBED

Wed Dec 21 2022 06:23:40 GMT+0000 (Coordinated Universal Time)

Saved by @chienbui #java

package com.cyberspace.tla.migrate.utils;

import com.cyberspace.tla.migrate.config.ConfigLoad;
import com.google.gson.JsonObject;
import javafx.util.Pair;
import okhttp3.*;
import okhttp3.OkHttpClient.Builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.*;
import java.util.concurrent.TimeUnit;

public class RESTUtil {
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    public static final MediaType FORM = MediaType.parse("application/x-www-form-urlencoded");
    public static Logger LOG = LoggerFactory.getLogger(RESTUtil.class);
    static OkHttpClient client = null;

    static OkHttpClient getClient(){
        if(client == null){
            client = new OkHttpClient();
            client = trustAllSslClient(client);
        }
        return client;
    }

    /*
    * This is very bad practice and should NOT be used in production.
    */
    private static final TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                @Override
                public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[]{};
                }
            }
    };
    private static final SSLContext trustAllSslContext;
    static {
        try {
            trustAllSslContext = SSLContext.getInstance("SSL");
            trustAllSslContext.init(null, trustAllCerts, new java.security.SecureRandom());
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            throw new RuntimeException(e);
        }
    }
    private static final SSLSocketFactory trustAllSslSocketFactory = trustAllSslContext.getSocketFactory();

    public static OkHttpClient trustAllSslClient(OkHttpClient client) {
//        LOG.warn("Using the trustAllSslClient is highly discouraged and should not be used in Production!");
        int timeoutInSec = Integer.parseInt(ConfigLoad.getConfigLoad().getConfig("service.timeout.sec"));
//        int timeoutInSec = 5;
        Builder builder = client.newBuilder()
                .writeTimeout(timeoutInSec, TimeUnit.SECONDS)
                .readTimeout(timeoutInSec, TimeUnit.SECONDS);
        builder.sslSocketFactory(trustAllSslSocketFactory, (X509TrustManager)trustAllCerts[0]);
        builder.hostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
        return builder.build();
    }

    public static String post(String url, String json, Map<String, String> headers) throws IOException {
        if (headers == null) {
            headers = new HashMap<>();
        }
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .headers(Headers.of(headers))
                .build();
        try {
            LOG.info("send json " + json + " to url " + url);
            Response response = getClient().newCall(request).execute();
            String ans = response.body().string();
            return ans;
        } catch (SocketTimeoutException e){
            LOG.error("TIME OUT, " + e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String timeOutError = ConfigLoad.getConfigLoad().getConfig("error.timeout");
            timeOutObj.addProperty("error", timeOutError);
            return GsonUtil.toJson(timeOutObj);
        } catch (IOException e) {
            LOG.error(e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String noDataError = ConfigLoad.getConfigLoad().getConfig("error.nodata");
            timeOutObj.addProperty("error", noDataError);
            return GsonUtil.toJson(timeOutObj);
        }
    }

    public static String postNoLog(String url, String json, Map<String, String> headers) throws IOException {
        if (headers == null) {
            headers = new HashMap<>();
        }
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .headers(Headers.of(headers))
                .build();
        try {
            Response response = getClient().newCall(request).execute();
            String ans = response.body().string();
            return ans;
        } catch (SocketTimeoutException e){
            LOG.error("TIME OUT, " + e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String timeOutError = ConfigLoad.getConfigLoad().getConfig("error.timeout");
            timeOutObj.addProperty("error", timeOutError);
          System.out.println("timeout");
            return GsonUtil.toJson(timeOutObj);
        } catch (IOException e) {
            LOG.error(e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String noDataError = ConfigLoad.getConfigLoad().getConfig("error.nodata");
            timeOutObj.addProperty("error", noDataError);
          System.out.println("no data");
            return GsonUtil.toJson(timeOutObj);
        }
    }

    public static String post(String url, List<Pair<String, String>> form, Map<String, String> headers) throws IOException {
        if (headers == null) {
            headers = new HashMap<>();
        }
        String stringForm = "";
        for (Pair<String, String> param: form) {
            stringForm += "&"+ param.getKey() +"="+ param.getValue();
        }

        stringForm = stringForm.substring(1);
        RequestBody body = RequestBody.create(FORM, stringForm);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .headers(Headers.of(headers))
                .build();
        try {
            LOG.info("send formdata " + stringForm + " to url " + url);
            Response response = getClient().newCall(request).execute();
            String ans = response.body().string();
            return ans;
        } catch (SocketTimeoutException e){
            LOG.error("TIME OUT, " + e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String timeOutError = ConfigLoad.getConfigLoad().getConfig("error.timeout");
            timeOutObj.addProperty("error", timeOutError);
            return GsonUtil.toJson(timeOutObj);
        } catch (IOException e) {
            LOG.error(e.getMessage());
            JsonObject timeOutObj = new JsonObject();
            String noDataError = ConfigLoad.getConfigLoad().getConfig("error.nodata");
            timeOutObj.addProperty("error", noDataError);
            return GsonUtil.toJson(timeOutObj);
        }
    }

    public static String get(String url, Map<String, String> headers) throws IOException {
        String result = "{}";
        try{
            if (headers == null) {
                headers = new HashMap<>();
            }
            Request request = new Request.Builder()
                    .url(url)
                    .get()
                    .headers(Headers.of(headers))
                    .build();
            LOG.info("Get url " + url);
            LOG.info("Header: " + headers);
            Response response = getClient().newCall(request).execute();
            result =  response.body().string();
//            LOG.info("Response: " + result);
        }catch (SocketTimeoutException e){
            LOG.error("Time out when get url " + url);
            JsonObject timeOutObj = new JsonObject();
            timeOutObj.addProperty("isTimeOut", "true");
            return GsonUtil.toJson(timeOutObj);
        }catch (Exception e){
            LOG.error(e.getMessage());
        }
        return result;
    }

    public static String get(String url, Map<String, String> headers, Map<String, String> params){
      String result = "{}";
      try{
        if (headers == null) {
          headers = new HashMap<>();
        }
//        create Http url with adding params
        HttpUrl.Builder httpUrl = HttpUrl.parse(url).newBuilder();
        if(params != null){
          for(Map.Entry<String, String> param : params.entrySet()) {
            httpUrl.addQueryParameter(param.getKey(),param.getValue());
          }
        }
        Request request = new Request.Builder()
          .url(httpUrl.build())
          .get()
          .headers(Headers.of(headers))
          .build();
        LOG.info("Get url " + url);
        LOG.info("Header: " + headers);
        LOG.info("Params" + params);
        Response response = getClient().newCall(request).execute();
        result =  response.body().string();
//            LOG.info("Response: " + result);
      }catch (SocketTimeoutException e){
        LOG.error("Time out when get url " + url);
        JsonObject timeOutObj = new JsonObject();
        timeOutObj.addProperty("isTimeOut", "true");
        return GsonUtil.toJson(timeOutObj);
      }catch (Exception e){
        LOG.error(e.getMessage());
      }
      return result;
    }

}
content_copyCOPY