package net.javase.onenet.utils; import cn.hutool.core.util.URLUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.Method; import com.alibaba.fastjson.JSONObject; import net.javase.onenet.api.ApiRequest; import net.javase.onenet.api.ApiResponse; import net.javase.onenet.exception.ApiException; import java.io.File; import java.nio.charset.StandardCharsets; /** * 请求工具 * * @author Frank */ public class RequestUtil { /** * 发送请求 * * @param req request * @param accessKey accessKey * @return {@link ApiResponse} */ public static ApiResponse doRequest(ApiRequest req, String accessKey) { return doRequest(req, accessKey, ApiResponse.class); } /** * 发送请求 * * @param req req * @param accessKey accessKey * @param clazz clazz * @param T * @return T */ public static T doRequest(ApiRequest req, String accessKey, Class clazz) { Method method = req.getMethod(); String url = req.getDomain().getDomain() + req.url(); if (req.getQuery() != null && req.getQuery().size() > 0) { String query = URLUtil.buildQuery(req.getQuery(), StandardCharsets.UTF_8); url += "?" + query; } HttpRequest request = HttpRequest.of(url).method(method); if (req.getContentType() != null) { request.contentType(req.getContentType().toString()); } if (req.getBody() != null && req.getBody().size() > 0) { request.body(JSONObject.toJSONString(req.getBody())); } String expirationTime = String.valueOf((System.currentTimeMillis() / 1000) + 600); String token = SignUtil.assembleToken(req.getVersion(), req.getRes(), expirationTime, req.getSignMethod(), accessKey); request.header("authorization", token); return doRequest(request, clazz); } /** * 发送请求 * * @param request {@link HttpRequest} * @param clazz response class * @param T * @return response */ public static T doRequest(HttpRequest request, Class clazz) { try (HttpResponse response = request.execute()) { String body = response.body(); System.out.println(body); return JSONObject.parseObject(body, clazz); } catch (Exception ex) { throw new ApiException("请求异常", ex); } } /** * 文件下载 * * @param req {@link ApiRequest} * @param accessKey accessKey * @param target {@link File} */ public static void download(ApiRequest req, String accessKey, File target) { Method method = req.getMethod(); String url = req.getDomain().getDomain() + req.url(); if (req.getQuery() != null && req.getQuery().size() > 0) { String query = URLUtil.buildQuery(req.getQuery(), StandardCharsets.UTF_8); url += "?" + query; } HttpRequest request = HttpRequest.of(url).method(method); if (req.getContentType() != null) { request.contentType(req.getContentType().toString()); } if (req.getBody() != null && req.getBody().size() > 0) { request.body(JSONObject.toJSONString(req.getBody())); } String expirationTime = String.valueOf((System.currentTimeMillis() / 1000) + 600); String token = SignUtil.assembleToken(req.getVersion(), req.getRes(), expirationTime, req.getSignMethod(), accessKey); request.header("authorization", token); download(request, target); } /** * 文件下载 * * @param request {@link HttpRequest} * @param target {@link File} */ public static void download(HttpRequest request, File target) { try (HttpResponse response = request.execute()) { response.writeBody(target); } catch (Exception ex) { throw new ApiException("文件下载异常", ex); } } }