fxkh-txl-service/module-common/src/main/java/com/whdc/common/utils/HttpHelper.java

236 lines
8.8 KiB
Java
Raw Normal View History

package com.whdc.common.utils;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @author lyf
* @since 2025-06-25
*/
@Slf4j
@Component
public class HttpHelper {
@Autowired
private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
// public @NotNull String get(@NotNull String url, @Nullable Map<String, String> params, @Nullable Map<String, String> headers) {
// if (url.isEmpty()) {
// return "url为空";
// }
//
// Request.Builder requestBuilder = new Request.Builder()
// .url(url)
// .get();
//
// //header
// if (headers != null) {
// for (Map.Entry<String, String> entry : headers.entrySet()) {
// String key = entry.getKey();
// String value = entry.getValue();
// if (key != null && value != null) {
// requestBuilder.header(key, value);
// }
// }
// }
// //doGet
// Request request = requestBuilder.build();
//
// return doGet(request);
// }
//
// private @NotNull String doGet(Request request) {
// try (Response response = okHttpClient.newCall(request).execute()) {
// if (response.isSuccessful() && response.body() != null) {
// return response.body().string();
// } else {
// return "请求失败:" + response;
// }
// } catch (IOException e) {
// return "网络异常:" + e.getMessage();
// }
// }
public @NotNull String postJsonString(@NotNull String url, @Nullable String json, @Nullable Map<String, String> headers) {
return postJsonString(url, json, headers, StandardCharsets.UTF_8);
}
public @NotNull String postJsonString(@NotNull String url, @Nullable String json, @Nullable Map<String, String> headers, @NotNull Charset charset) {
if (url.isEmpty()) {
return "url为空";
}
if (json == null) {
json = "{}";
}
//mediatype
MediaType mediaType = MediaType.get("application/json");
//payload
RequestBody requestBody = RequestBody.create(json, mediaType);
//builder
Request.Builder requestBuilder = new Request.Builder()
.url(url)
.header("Content-Type", mediaType + ";charset=" + charset.name())
.post(requestBody);
//header
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (key != null && value != null) {
requestBuilder.header(key, value);
}
}
}
Request request = requestBuilder.build();
//post
String resp = doPost(request);
if (resp.contains("请求失败") || resp.contains("网络异常")) {
log.warn("请求失败request{}", request);
log.warn("请求失败request header{}", headers);
log.warn("请求失败request payload{}", json);
}
return resp;
}
public @NotNull String postFormData(@NotNull String url, @Nullable Map<String, Object> params, @Nullable Map<String, String> headers) {
return postFormData(url, params, headers, StandardCharsets.UTF_8);
}
public @NotNull String postFormData(@NotNull String url, @Nullable Map<String, Object> params, @Nullable Map<String, String> headers, @NotNull Charset charset) {
if (url.isEmpty()) {
return "url为空";
}
//mediatype
MediaType mediaType = MultipartBody.FORM;
//payload
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder()
.setType(MultipartBody.FORM);
if (params != null) {
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (key == null || value == null) {
continue;
}
if (value instanceof String) {
bodyBuilder.addFormDataPart(key, (String) value);
} else if (value instanceof File) {
File file = (File) value;
RequestBody fileBody = RequestBody.create(file, MediaType.get("application/octet-stream"));
bodyBuilder.addFormDataPart(key, file.getName(), fileBody);
} else {
return "不支持的参数类型";
}
}
}
RequestBody requestBody = bodyBuilder.build();
//builder
Request.Builder requestBuilder = new Request.Builder()
.url(url)
.header("Content-Type", mediaType + ";charset=" + charset.name())
.post(requestBody);
//header
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (key != null && value != null) {
requestBuilder.header(key, value);
}
}
}
//post
Request request = requestBuilder.build();
String resp = doPost(request);
if (resp.contains("请求失败") || resp.contains("网络异常")) {
log.warn("请求失败request{}", request);
log.warn("请求失败request header{}", headers);
log.warn("请求失败request payload{}", params);
}
return resp;
}
public @NotNull String postFormUrlEncoded(@NotNull String url, @Nullable Map<String, Object> params, @Nullable Map<String, String> headers) {
return postFormUrlEncoded(url, params, headers, StandardCharsets.UTF_8);
}
public @NotNull String postFormUrlEncoded(@NotNull String url, @Nullable Map<String, Object> params, @Nullable Map<String, String> headers, @NotNull Charset charset) {
if (url.isEmpty()) {
return "url为空";
}
//mediatype
MediaType mediaType = MediaType.get("application/x-www-form-urlencoded");
//payload
FormBody.Builder bodyBuilder = new FormBody.Builder(charset);
if (params != null) {
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (key != null && value != null) {
try {
// Manually encode using GBK
String encodedValue = URLEncoder.encode(value.toString(), "GBK");
bodyBuilder.addEncoded(key, encodedValue);
} catch (Exception e) {
return "参数encode错误";
}
}
}
}
RequestBody formBody = bodyBuilder.build();
//builder
Request.Builder requestBuilder = new Request.Builder()
.url(url)
.header("Content-Type", mediaType + ";charset=" + charset.name())
.post(formBody);
//header
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (key != null && value != null) {
requestBuilder.header(key, value);
}
}
}
//post
Request request = requestBuilder.build();
String resp = doPost(request);
if (resp.contains("请求失败") || resp.contains("网络异常")) {
log.warn("请求失败request{}", request);
log.warn("请求失败request header{}", headers);
log.warn("请求失败request payload{}", params);
}
return resp;
}
private @NotNull String doPost(Request request) {
try (Response response = okHttpClient.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
return response.body().string();
} else {
log.warn("请求失败response{}", response);
return "请求失败:" + response;
}
} catch (IOException e) {
return "网络异常:" + e.getMessage();
}
}
}