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

Retrofit 2.4请求头末尾自动添加换行符导致请求失败的解决方法

解决Retrofit v2.4请求头换行符导致请求失败的问题

这个问题我之前帮团队排查过,Retrofit 2.4版本确实存在一个已知的小bug——在处理请求头时会意外插入换行符,尤其是在通过拦截器或手动构建Header的场景下,很容易导致服务端解析请求头失败。结合你的示例,我整理了几个可行的解决办法:

1. 优先升级Retrofit版本(最省心的方案)

Square在Retrofit 2.5.0版本已经修复了这个请求头换行的问题,直接升级到稳定的新版本是最彻底的解决方式。你只需要修改项目的依赖配置:

如果用Gradle,更新Retrofit的依赖:

implementation 'com.squareup.retrofit2:retrofit:2.9.0' // 可选择最新稳定版,比如2.9.0或更高

升级后不需要额外修改代码,原有请求逻辑就能正常工作。

2. 无法升级时,用OkHttp拦截器清理请求头

如果因为项目兼容性问题暂时不能升级版本,可以通过OkHttp的拦截器手动清理请求头中的换行符。具体代码如下:

// 创建自定义拦截器,清理请求头中的换行、回车符
OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(chain -> {
        Request originalRequest = chain.request();
        Request.Builder requestBuilder = originalRequest.newBuilder();

        // 处理Authorization头(你遇到的核心问题点)
        String authHeader = originalRequest.header("Authorization");
        if (authHeader != null) {
            // 移除所有换行符和回车符
            String cleanedAuth = authHeader.replaceAll("\\r|\\n", "");
            requestBuilder.header("Authorization", cleanedAuth);
        }

        // 如果还有其他可能受影响的请求头,也可以用同样方式处理
        return chain.proceed(requestBuilder.build());
    })
    .build();

// 将处理后的OkHttpClient传给Retrofit
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("你的基础接口地址")
    .client(okHttpClient)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

3. 检查Header构建时的拼写和编码问题

另外注意到你的示例请求头写的是 Authorization: Base dXNlcm5hbWU6cGFzc3dvcmQ=,这里有个小错误:HTTP标准的Basic认证前缀应该是Basic而不是Base,这个拼写错误本身也会导致认证失败,建议先修正这个问题。

同时,生成Base64编码时,要确保不生成换行符。比如在Android中使用Base64.encodeToString时,要指定Base64.NO_WRAP参数:

String credentials = "username:password";
// 用NO_WRAP避免生成带换行的Base64字符串
String base64 = Base64.encodeToString(credentials.getBytes(StandardCharsets.UTF_8), Base64.NO_WRAP);
String authHeader = "Basic " + base64;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:40:39