基于okhttp封装http工具类

@Slf4j
public class IAMClientUtil {
    private static final Base64.Encoder base64Encoder = Base64.getEncoder();

    private static String doHelper(Request request) {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(600, TimeUnit.SECONDS)
                .writeTimeout(600, TimeUnit.SECONDS)
                .readTimeout(600, TimeUnit.SECONDS)
                .build();

        Response response = null;
        String resp = null;
        ResponseBody responseBody;
        long startTime = System.currentTimeMillis();
        try {
            response = client.newCall(request).execute();
            responseBody = response.body();
            resp = responseBody.string();
        } catch (IOException e) {
            log.error("http请求响应失败");
            e.printStackTrace();
        }

        long endTime = System.currentTimeMillis();
        log.info("methon=>{},code=>{},cost=>{}", request.method(), response.code(), endTime - startTime);
        log.info("response=>{}", resp);
        return resp;
    }

    private static Request.Builder doAuth(Zen zen, String method, String url, Map<String, Object> params) {
        log.info("url=>{}", zen.getHost() + zen.getUri() + url + paramsConvertUrl(params));
        if (params == null) {
            params = new HashMap<>();
        }
        params.put("userId", zen.getAccount().getUser());
        return new Request.Builder()
                .url(zen.getHost() + zen.getUri() + url + paramsConvertUrl(params))
                .headers(getHeaders(zen, method, url));
    }


    public static String doGet(Zen zen, String url) {
        Request request = doAuth(zen, "GET", url, null).build();
        return doHelper(request);
    }

    public static String doGet(Zen zen, String url, Object object) {
        String body = JSONUtil.parseObj(object).toString();
        log.info("body=>" + body);

        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), body);

        Request request = doAuth(zen, "GET", url, null).method("GET", requestBody).build();
//        doAuth(zen, "GET", url, null).method().build();
        return doHelper(request);
    }

    public static String doGet(Zen zen, String url, Map<String, Object> params) {



        Request request = doAuth(zen, "GET", url, params).build();
        return doHelper(request);
    }

    public static String doPost(Zen zen, String url) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), "");
        Request request = doAuth(zen, "POST", url, null).post(requestBody).build();
        return doHelper(request);
    }

    public static String doPost(Zen zen, String url, Object object) {
        String body = JSONUtil.parseObj(object).toString();
        log.info("body=>" + body);
        String ContentType = "application/json";
 
        RequestBody requestBody = RequestBody.create(MediaType.parse(ContentType), body);
        Request request = doAuth(zen, "POST", url, null).post(requestBody).build();
        return doHelper(request);
    }

    public static String doPost(Zen zen, String url, Map<String, Object> params) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), "");
        Request request = doAuth(zen, "POST", url, params).post(requestBody).build();
        return doHelper(request);
    }

    public static String doPost(Zen zen, String url, Map<String, Object> params, Object object) {
        String body = JSONUtil.parseObj(object).toString();
        log.info("body=>" + body);

        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), body);

        Request request = doAuth(zen, "POST", url, params).post(requestBody).build();
        return doHelper(request);
    }

    /**
     * 文件上传
     */
    public static String doUploadFile(Zen zen, String url) {
        File file = new File(System.currentTimeMillis() + "");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        MediaType mediaType = MediaType.parse("text/plain");
        RequestBody body = RequestBody.create(mediaType, file);

        RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("file", file.getName(), body)
                .build();

        Request request = doAuth(zen, "POST", url, null).post(requestBody).build();
        return doHelper(request);
    }

    public static String doDelete(Zen zen, String url) {
        Request request = doAuth(zen, "DELETE", url, null).delete().build();
        return doHelper(request);
    }

    public static String doDelete(Zen zen, String url, Object object) {
        String body = JSONUtil.parseObj(object).toString();
        log.info("body=>" + body);

        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), body);
        Request request = doAuth(zen, "DELETE", url, null).delete(requestBody).build();
        return doHelper(request);
    }

    public static String doDelete(Zen zen, String url, Map<String, Object> params) {
        Request request = doAuth(zen, "DELETE", url, params).delete().build();
        return doHelper(request);
    }


    public static String doPut(Zen zen, String url) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), "");
        Request request = doAuth(zen, "PUT", url, null).put(requestBody).build();
        return doHelper(request);
    }


    public static String doPut(Zen zen, String url, Object object) {
        String body = JSONUtil.parseObj(object).toString();
        log.info("body=>" + body);
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), body);
        Request request = doAuth(zen, "PUT", url, null).put(requestBody).build();
        return doHelper(request);
    }

    public static String getAuthorization(Zen zen, String url, String method, String timeStamp) {
        String accessInfo = method + "\n" + timeStamp + "\n" + zen.getUri() + url;
        String signature = base64Encoder.encodeToString(HmacUtils.hmacSha1(zen.getAccount().getAccessKey(), accessInfo));
        String authorization = zen.getAccount().getAccessId() + ":" + signature;
        return authorization;
    }

    public static String paramsConvertUrl(Map<String, Object> params) {
        if (params != null) {
            StringBuilder sb = new StringBuilder("?");
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
            String urlParamsStr = sb.toString();
            return urlParamsStr.substring(0, urlParamsStr.length() - 1);
        }
        return "";
    }


    public static Headers SetHeaders(Map<String, String> headersParams) {
        Headers headers = null;
        okhttp3.Headers.Builder headersbuilder = new okhttp3.Headers.Builder();
        Iterator<String> iterator = headersParams.keySet().iterator();
        String key = "";
        while (iterator.hasNext()) {
            key = iterator.next().toString();
            headersbuilder.add(key, headersParams.get(key));
        }
        headers = headersbuilder.build();

        log.info(headers.toString());
        return headers;
    }

    private static Headers getHeaders(Zen zen, String method, String url) {
        String xRequestId = "xRequestId-AutoTestCase-" + System.currentTimeMillis();
        log.info("xRequestId=>{}", xRequestId);

        String timeStamp = ZonedDateTime.now().format(DateTimeFormatter.ISO_INSTANT);
        String authorization = getAuthorization(zen, url, method, timeStamp);

        Map<String, String> headersParams = new HashMap<>();
        headersParams.put("xRequestId", xRequestId);

//        headersParams.put("Content-Type", "application/json");

        return SetHeaders(headersParams);
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值