236 lines
8.8 KiB
Java
236 lines
8.8 KiB
Java
|
|
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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|