onenet-api/src/main/java/net/javase/onenet/utils/RequestUtil.java
2023-07-18 17:27:49 +08:00

126 lines
4.0 KiB
Java

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> T
* @return T
*/
public static <T> T doRequest(ApiRequest req, String accessKey, Class<T> 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> T
* @return response
*/
public static <T> T doRequest(HttpRequest request, Class<T> 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);
}
}
}