@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); } }
基于okhttp封装http工具类
最新推荐文章于 2024-04-26 19:13:30 发布