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

Retrofit携带Bearer Token发起GET请求返回401未授权问题求助

问题原因与解决方案

1. 首要排查:Header参数传递格式错误

Retrofit的@Header("Authorization")注解会自动拼接请求头的键名,你传递的参数仅需要填写头的值,不需要包含Authorization: 前缀:

  • 错误传值示例:"Authorization: Bearer 你的API密钥"(会导致最终请求头重复键名,变为Authorization: Authorization: Bearer xxx,直接触发鉴权失败)
  • 正确传值示例:"Bearer 你的API密钥"(注意Bearer首字母大写,后面跟1个半角空格再接密钥,不要有多余字符)

2. 更规范的全局鉴权配置(可选)

如果项目中多数接口都需要Bearer Token鉴权,推荐用OkHttp拦截器全局统一添加请求头,不用每个接口单独传Header参数,避免重复出错:

// 构建OkHttpClient时添加拦截器
val okHttpClient = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val originalRequest = chain.request()
        // 排除不需要鉴权的/book类接口
        if (!originalRequest.url.encodedPath.startsWith("/book")) {
            val requestWithAuth = originalRequest.newBuilder()
                .header("Authorization", "Bearer 你的API密钥")
                .build()
            return@addInterceptor chain.proceed(requestWithAuth)
        }
        chain.proceed(originalRequest)
    }
    .build()

// 构建Retrofit实例时传入配置好的okHttpClient
val retrofit = Retrofit.Builder()
    .baseUrl("https://the-one-api.dev/v2/")
    .client(okHttpClient)
    // 其他配置如JSON转换器等
    .build()

配置完成后可以直接删除LotrApi中getMovieList方法的authHeader参数,调用接口时也不需要再单独传Header。

3. 兜底排查点

  • 确认你的API密钥是激活有效的,没有拼写错误、首尾没有多余空格
  • 确认Retrofit的baseUrl配置正确,末尾带/,和接口路径拼接后没有多余斜杠或路径缺失
  • 可接入OkHttp的LoggingInterceptor打印完整请求日志,直接核对请求头里的Authorization字段是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:24:00