我记得很早之前跟路小磊聊过,HTTP请求超时的时间,当时不知道说的是什么,说的是会再后面迭代变更。结果一直到现在都没变更!所以本篇文章需要额外强调,请求需要配置超时的时间!
带有Slf4j日志封装Hutool HTTP工具类
@Slf4j
public class HttpUtils {
// 发送 GET 请求
public static String sendGet(String url) {
log.info("发送 GET 请求,URL: {}", url);
HttpResponse response = HttpRequest.get(url).timeout(2000).execute();
return handleResponse(response);
}
// 发送 POST 请求
public static String sendPost(String url, Map<String, Object> paramMap) {
log.info("发送 POST 请求,URL: {}, 参数: {}", url, paramMap);
HttpResponse response = HttpRequest.post(url).form(paramMap).timeout(2000).execute();
return handleResponse(response);
}
// 发送 JSON 数据的 POST 请求
public static String sendJsonPost(String url, Object jsonData) {
String jsonString = JSONUtil.toJsonStr(jsonData);
log.info("发送 JSON POST 请求,URL: {}, JSON 数据: {}", url, jsonString);
HttpResponse response = HttpRequest.post(url).body(jsonString).timeout(2000).execute();
return handleResponse(response);
}
// 发送带请求头的 GET 请求
public static String sendGetWithHeaders(String url, Map<String, String> headers) {
log.info("发送带请求头的 GET 请求,URL: {}, 请求头: {}", url, headers);
HttpResponse response = HttpRequest.get(url).headerMap(headers, true).timeout(2000).execute();
return handleResponse(response);
}
// 发送带请求头的 POST 请求
public static String sendPostWithHeaders(String url, Map<String, Object> paramMap, Map<String, String> headers) {
log.info("发送带请求头的 POST 请求,URL: {}, 参数: {}, 请求头: {}", url, paramMap, headers);
HttpResponse response = HttpRequest.post(url).form(paramMap).headerMap(headers, true).timeout(2000).execute();
return handleResponse(response);
}
// 处理响应
private static String handleResponse(HttpResponse response) {
int status = response.getStatus();
if (status == HTTP_OK) {
String responseBody = response.body();
log.info("请求成功,状态码:{}, 响应内容:{}", status, responseBody);
return responseBody;
} else {
// 可根据实际需求处理其他状态码
throw new RuntimeException("请求失败,状态码:" + status);
}
}
}
Post请求 这里处理Json使用的是fastjson
// 拼接URL
String url = "你的URL";
// 请求体参数对象 params
Map<String, Object> params = new HashMap<>();
params.put("userAccount", "740969606");
// 创建HTTP请求对象
HttpRequest post = HttpUtil.createPost(url);
// 设定请求头
post.header(Header.CONTENT_TYPE,"application/json");
// 设定请求体
post.body(JSONObject.toJSONString(params));
//post.form(params); //特别说明,form表单提交也在请求体里,但服务接收不一定支持form表单内容
// 执行请求
HttpResponse execute = post.timeout(2000).execute();
// 解析结果
// FASTJSON用:JSONObject jsonObject = JSONObject.parseObject(execute.body());
JSONObject jsonObject = JSONUtil.parseObj(response.body());
GET请求
参数放在URL中
String url = "你要请求的URL";
StringBuilder urlWithParams = new StringBuilder(url.trim()).append("?");
// 请求体参数对象 params
Map<String, String> params = new LinkedHashMap<>();
params.put("userAccount", "740969606");
// 拼接的GET请求的参数内容在URL中
params.forEach((k,v)->{
urlWithParams.append(k).append("=").append(v).append("&");
});
// 创建Http Get请求对象,同时指定最新带参数的url
HttpRequest get = HttpUtil.createGet(urlWithParams.toString());
// 设定请求头
get.header(Header.AUTHORIZATION,"我是Token");
// 执行请求
HttpResponse execute = get.timeout(2000).execute();
// 解析结果
JSONObject jsonObject = JSONObject.parseObject(execute.body());
System.out.println(jsonObject);
参数放在form中
String GD_WEATHER_URL = "https://restapi.amap.com/v3/weather/weatherInfo";
StringBuilder urlWithParams = new StringBuilder(GD_WEATHER_URL).append("?");
// 请求体参数对象 params
Map<String, Object> params = new LinkedHashMap<>();
params.put(GD_WEATHER_ARG_KEY, "dc81de5a83995509bd76c6a03d62ee20"); // 个人测试高德API的Key。
params.put(GD_WEATHER_ARG_CITY, "320211"); // adcode城市编码。可在 查看
params.put(GD_WEATHER_ARG_EXTENSIONS, "base"); // 可选值:base/all;base:返回实况天气;all:返回预报天气
params.put(GD_WEATHER_ARG_OUTPUT, "JSON"); // 返回格式;可选值:JSON,XML
// 创建Http Get请求对象,同时指定最新带参数的url
HttpRequest get = HttpUtil.createGet(urlWithParams.toString());
// 执行请求
HttpResponse execute = get.form(params).timeout(2000).execute();
// 解析结果
JSONObject jsonObject = JSONUtil.parseObj(execute.body());
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤