温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何调试java HTTP请求

发布时间:2026-09-10 23:01:57 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

调试 Java 中的 HTTP 请求,通常可以从代码层、网络层、工具层三个角度入手。下面按常见场景给你一个实用指南。


一、代码层调试(最常见)

1. 打印请求和响应内容

无论用哪种 HTTP 客户端,第一步都是“看清楚发了什么、回了什么”。

Java 11+ HttpClient 示例

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://example.com/api"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"test\"}"))
        .build();

HttpResponse<String> response =
        client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("Status: " + response.statusCode());
System.out.println("Headers: " + response.headers());
System.out.println("Body: " + response.body());

✅ 重点打印:

  • 请求 URL
  • 请求方法(GET / POST)
  • 请求头(尤其是 Content-Type、Authorization)
  • 请求体
  • 响应状态码
  • 响应头和响应体

2. 使用日志框架打印 HTTP 细节

如果你用的是 Apache HttpClient / OkHttp / Spring RestTemplate / WebClient,可以开启 HTTP 日志。

OkHttp 示例

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(interceptor)
        .build();

日志会显示:

  • 完整请求
  • 完整响应
  • 耗时

3. Spring 项目调试

RestTemplate

restTemplate.getInterceptors().add(
    new LoggingClientHttpRequestInterceptor()
);

WebClient(推荐)

WebClient.builder()
    .filter(ExchangeFilterFunction.ofRequestProcessor(
        req -> {
            System.out.println(req.method() + " " + req.url());
            return Mono.just(req);
        }
    ))
    .build();

二、网络层调试(确认“请求真的发出去了”)

1. 用 curl 对比测试

curl -X POST https://example.com/api \
  -H "Content-Type: application/json" \
  -d '{"name":"test"}'

如果 curl 成功但 Java 失败:

  • 差请求头
  • 差 TLS / 代理
  • 差编码

2. 抓包工具(非常关键)

推荐工具

  • Wireshark(底层 TCP/HTTP)
  • Fiddler
  • Charles(HTTPS 抓包最方便)
Java + Charles 示例
-Dhttps.proxyHost=127.0.0.1
-Dhttps.proxyPort=8888

或代码中:

System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8888");

✅ 可以清楚看到:

  • TLS 握手是否失败
  • 请求是否真的发出
  • 服务器返回了什么

三、常见错误排查清单

✅ 1. 404 / 405

  • URL 拼错
  • 方法不对(GET 写成 POST)

✅ 2. 400 Bad Request

  • JSON 格式错误
  • 缺少必填字段
  • Content-Type 不对

✅ 3. 401 / 403

  • Token 过期
  • Header 名称错误(Authorization vs token)

✅ 4. 超时(Timeout)

client.send(request, BodyHandlers.ofString());

可能原因:

  • 服务器慢
  • 代理问题
  • 防火墙

四、进阶调试技巧

1. 开启 JVM 网络调试

-Djavax.net.debug=all

会打印 SSL / TCP 层细节(信息非常多)。


2. 使用 Postman 先验证接口

再写 Java 代码,避免“代码和接口一起错”。


五、推荐调试流程(实战顺序)

  1. Postman / curl 验证接口
  2. Java 打印请求和响应
  3. 抓包(Charles / Wireshark)
  4. 对比差异
  5. 逐步修复

如果你愿意,可以告诉我:

  • 用的什么 HTTP 客户端(HttpClient / OkHttp / RestTemplate / WebClient)
  • 报错信息或状态码
  • 是本地还是服务器环境

我可以直接帮你定位问题。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手