Hutool 发送 HTTP 请求的几种常见写法

最简单的 GET 请求:

java 复制代码
String result = HttpUtil.get("https://www.baidu.com");

带参数的 GET 请求:

java 复制代码
// 方法1: 直接拼接URL参数
String result = HttpUtil.get("https://www.baidu.com?name=张三&age=18");

// 方法2: 使用 HashMap 构建参数
HashMap<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("age", "18");
String result = HttpUtil.get("https://www.baidu.com", params);

POST 请求:

java 复制代码
// 简单POST
String result = HttpUtil.post("https://www.baidu.com", "body content");

// 带表单参数的POST
HashMap<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("age", "18");
String result = HttpUtil.post("https://www.baidu.com", params);

发送 JSON:

java 复制代码
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "张三");
paramMap.put("age", 18);

String result = HttpRequest.post("https://www.baidu.com")
    .header("Content-Type", "application/json")
    .body(JSONUtil.toJsonStr(paramMap))
    .execute()
    .body();

高度自定义的请求:

java 复制代码
HttpRequest request = HttpRequest.post("https://www.baidu.com")
    .header("Authorization", "Bearer token123")
    .header("Custom-Header", "value")
    .timeout(20000)  //超时时间20秒
    .form(params)    //表单参数
    .cookie("sessionId", "abc123");

HttpResponse response = request.execute();
String result = response.body();
int status = response.getStatus();

文件上传:

java 复制代码
HashMap<String, Object> params = new HashMap<>();
params.put("file", FileUtil.file("path/file.jpg"));
String result = HttpUtil.post("https://www.baidu.com/upload", params);

处理响应:

java 复制代码
HttpResponse response = HttpRequest.get("https://www.baidu.com").execute();
// 获取响应状态码
int status = response.getStatus();
// 获取响应头
String contentType = response.header("Content-Type");
// 获取响应体
String body = response.body();
// 获取Cookies
List<HttpCookie> cookies = response.getCookies();

设置代理:

java 复制代码
HttpRequest.get("https://www.baidu.com")
    .setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888)))
    .execute();

请求建议:

  1. 建议在生产环境中设置合适的超时时间
  2. 对于大量请求,使用 HttpUtil.createGet() 或 HttpUtil.createPost() 预创建请求对象
  3. 处理响应时注意异常处理
  4. 如果需要复用连接,考虑使用 HttpUtil.createHttp() 创建客户端

错误处理示例:

java 复制代码
try {
    HttpResponse response = HttpRequest.get("https://www.baidu.com")
        .timeout(20000)
        .execute();
    if (response.isOk()) {
        String result = response.body();
        // 处理正常响应
    }
} catch (HttpException e) {
    // 处理超时等网络异常
    e.printStackTrace();
} catch (Exception e) {
    // 处理其他异常
    e.printStackTrace();
}
相关推荐
lpfasd12317 分钟前
网络盘上的同一个报错,两个 AI 各走了一条路
网络·ai编程
腾科IT教育29 分钟前
HCIE-Datacom通关经验分享 - 毕业一年网工备考心得
网络·经验分享·学习方法·华为认证·hcie·数通
瑞克-桑切斯38 分钟前
真实企业场景 运维安全与管理
java·网络·github
星恒讯工业路由器1 小时前
2030通信网络决策:5G-A与6G的战略选择框架
网络·物联网·信息与通信·6g·5g-a·通信物联网·tco成本
见合八方1 小时前
光通信系统中的光电探测器
网络·soa·光通信·激光雷达·半导体光放大器
星恒讯工业路由器1 小时前
双栈时代的访问断层:当同一个域名走向两条网络路径
网络·物联网·信息与通信·ipv4·通信·ipv6·双栈网络
猿究院_夏燊2 小时前
SpringMVC 到底是怎么干活的?
java·网络·职场和发展
电子制造自留地3 小时前
AI服务器高多层PCB设计:阻抗控制、层间对位与孔金属化工程要点
大数据·网络·人工智能·科技·pcb工艺
最强小杰3 小时前
Claude Opus 4.8 调用报 529 怎么办?并发限制触发过载——退避策略与降级方案完整指南
运维·网络·python·ai