public class HttpUtil {
// 支持直接在String参数中传入文件
public static final String FILE_LABEL = "file:";
public static IResponse executeRequest(String url, String param, RequestMethod method,
Map<String, String> headers) {
return executeRequest(createDefaultHelper(), url, param, method, headers);
}
public static IResponse executeRequest(IHttpHelper httpHelper, String url, String param,
RequestMethod method, Map<String, String> headers) {
IResponse response = null;
if (param != null && param.startsWith(FILE_LABEL)) {
// 单个文件
File file = new File(param.substring(FILE_LABEL.length()));
response = httpHelper.executeRequest(new RequestParam(url, file, method, headers));
} else {
JSONObject jsonData = safeParseAsJson(param);
if (jsonData != null) {
if (param.contains(FILE_LABEL)) {
// 参数中包含文件
HashMap<String, Object> paramMap = new HashMap<String, Object>(5);
for (Map.Entry<String, Object> entry : jsonData.entrySet()) {
if (entry.getValue() instanceof String
&& ((String) entry.getValue()).startsWith(FILE_LABEL)) {
File newFile = new File(((String) entry.getValue()).substring(FILE_LABEL.length()));
// 转换为File对象
paramMap.put(entry.getKey(), newFile);
} else {
paramMap.put(entry.getKey(), entry.getValue());
}
}
response = httpHelper.executeRequest(new RequestParam(url, paramMap, method, headers));
} else {
response = httpHelper.executeRequest(new RequestParam(url, jsonData, method, headers));
}
} else {
response = httpHelper.executeRequest(new RequestParam(url, param, method, headers));
}
}
return response;
}
public static IResponse executeRequest(String url, String param, RequestMethod method) {
return executeRequest(url, param, method, null);
}
public static IResponse executeRequest(String url, String param) {
return executeRequest(url, param, RequestMethod.GET, null);
}
public static IResponse executeRequest(String url) {
return executeRequest(url, null, RequestMethod.GET, null);
}
public static IResponse executeRequest(RequestParam param) {
return executeRequest(createDefaultHelper(), param);
}
private static IResponse executeRequest(IHttpHelper httpHelper, RequestParam param) {
if (param.getParam() != null && param.getParam() instanceof String) {
return executeRequest(httpHelper, param.getUrl(), (String) param.getParam(),
param.getMethod(), param.getHeaders());
} else {
return httpHelper.executeRequest(param);
}
}
public static IResponse[] executeRequest(RequestParam[] params) {
if (params != null && params.length > 0) {
IHttpHelper httpHelper = createDefaultHelper();
IResponse[] responseArray = new IResponse[params.length];
for (int i = 0; i < params.length; i++) {
responseArray[i] = executeRequest(httpHelper, params[i]);
}
return responseArray;
}
return null;
}
public static List<IResponse> executeRequest(List<RequestParam> params) {
if (params != null && params.size() > 0) {
IHttpHelper httpHelper = createDefaultHelper();
ArrayList<IResponse> list = new ArrayList<IResponse>();
for (int i = 0; i < params.size(); i++) {
list.add(executeRequest(httpHelper, params.get(i)));
}
return list;
}
return null;
}
public static String executeRequestForText(String url, String param, RequestMethod method,
Map<String, String> headers) {
IResponse response = executeRequest(url, param, method, headers);
return response.parseAsString();
}
public static String executeRequestForText(String url, String param, RequestMethod method) {
return executeRequestForText(url, param, method, null);
}
public static String executeRequestForText(String url, String param) {
return executeRequestForText(url, param, RequestMethod.GET, null);
}
public static String executeRequestForText(String url) {
return executeRequestForText(url, null, RequestMethod.GET, null);
}
public static String executeRequestForText(RequestParam param) {
return createDefaultHelper().executeRequest(param).parseAsString();
}
private static OkHttpHelper createOkHttpHelper() {
return new OkHttpHelper();
}
public static IHttpHelper createDefaultHelper() {
return createOkHttpHelper();
}
private static JSONObject safeParseAsJson(String jsonStr) {
try {
Object obj = JSON.parseObject(jsonStr);
if (obj != null && obj instanceof JSONObject) {
return (JSONObject) obj;
}
} catch (Exception e) {
// e.printStackTrace();
}
return null;
}
}
public interface IHttpHelper {
IResponse executeRequest(RequestParam param);
enum RequestMethod {
GET, POST, PUT, DELETE
}
interface IResponse {
int status();
String message();
boolean isSuccessful();
long costTime();