You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OkHttp Get请求添加HttpHeader及调试验证方法咨询

OkHttp GET请求添加请求头及调试验证指南

我来帮你梳理一下OkHttp添加请求头的正确方式,以及怎么确认请求头是否真的发送到了服务器,完全从Java代码层面给你讲清楚~

一、正确添加请求头的两种常用方式

1. 单个请求直接添加

如果只是给某一个请求单独加请求头,直接在Request.Builder里调用addHeader()就可以了,简单直接:

// 构建带请求头的Request
Request request = new Request.Builder()
    .url("你的目标请求URL")
    .addHeader("Header", "123") // 直接在这里添加请求头
    .build();

// 创建OkHttpClient实例
OkHttpClient okHttpClient = new OkHttpClient();

// 发起异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 建议加上失败日志,方便排查问题
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            // 处理成功响应
            String responseContent = response.body().string();
            System.out.println("响应内容:" + responseContent);
        } else {
            System.out.println("请求失败,状态码:" + response.code());
        }
    }
});

2. 全局拦截器统一添加

如果你的App里多个请求都需要加相同的请求头,用Interceptor(拦截器)会更高效,你的代码其实已经用对了这个思路,我给你优化一下细节:

// 构建带拦截器的OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            // 获取原始请求
            Request originalRequest = chain.request();
            // 基于原始请求构建新请求,添加请求头
            Request newRequest = originalRequest.newBuilder()
                .addHeader("Header", "123")
                .build();
            // 继续执行修改后的请求
            return chain.proceed(newRequest);
        }
    })
    .build();

// 创建基础Request(不需要单独加头,拦截器会自动处理)
Request request = new Request.Builder()
    .url("你的目标请求URL")
    .build();

// 发起异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            System.out.println("请求成功");
        }
    }
});

这种方式下,所有通过这个okHttpClient发起的请求,都会自动带上你添加的Header: 123,非常适合全局统一配置的场景。

二、调试确认请求头已发送到服务器

1. 用OkHttp官方日志拦截器打印请求详情

这是最方便的调试方式,OkHttp提供了HttpLoggingInterceptor,可以打印完整的请求和响应日志,包括请求头。
首先添加依赖(Gradle项目):

implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'

然后修改OkHttpClient的构建代码,添加日志拦截器:

// 创建日志拦截器,设置日志打印级别
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(message -> {
    // 把日志输出到控制台
    System.out.println("OkHttp 日志:" + message);
});
// 设置为BODY级别,会打印请求头、请求体、响应头等所有细节
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor) // 先加日志拦截器,确保能看到修改后的请求
    .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request newRequest = originalRequest.newBuilder()
                .addHeader("Header", "123")
                .build();
            return chain.proceed(newRequest);
        }
    })
    .build();

运行代码后,你会在控制台看到类似这样的日志片段,里面就能找到你添加的请求头:

OkHttp 日志:--> GET 你的请求URL HTTP/1.1
OkHttp 日志:Header: 123
OkHttp 日志:--> END GET

2. 在自定义拦截器里手动打印请求头

如果你不想加额外依赖,也可以直接在自己的拦截器里打印请求头信息:

@Override
public Response intercept(Chain chain) throws IOException {
    Request originalRequest = chain.request();
    Request newRequest = originalRequest.newBuilder()
        .addHeader("Header", "123")
        .build();
    
    // 遍历打印所有请求头
    Headers headers = newRequest.headers();
    for (int i = 0; i < headers.size(); i++) {
        String headerName = headers.name(i);
        String headerValue = headers.value(i);
        System.out.println("请求头[" + i + "]:" + headerName + " = " + headerValue);
    }
    
    return chain.proceed(newRequest);
}

这样就能直接在控制台看到所有要发送的请求头,确认Header:123存在即可。

3. 用抓包工具验证(最准确)

如果要100%确认请求头确实发送到了服务器,可以用Charles、Fiddler这类抓包工具:

  • 配置好手机或模拟器的代理,指向抓包工具的地址
  • 启动抓包工具后发起请求
  • 在工具的请求列表里找到你的请求,查看请求头部分,就能看到是否包含你添加的Header:123

这种方式能直接看到服务器收到的真实请求报文,是最准确的验证方式。

小提示

你的代码里onFailure方法是空的,建议加上e.printStackTrace(),这样请求失败时能快速看到异常原因,方便排查问题~

内容的提问来源于stack exchange,提问作者SO 80

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:23:11