126 lines
4.0 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|