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

236 lines
8.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}
}