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

Android端带Token调用API返回401错误,iOS正常的问题排查与解决

Android端API请求返回401 Unauthorized但iOS正常的排查与修复方案

可能的原因及对应修复方法

1. Token格式或读取异常

Android端从Redux store读取的cookie(即Token)可能包含多余空格、换行或特殊字符,服务器解析时判定无效,而iOS端的字符串处理逻辑自动忽略了这些问题。

修复:

  • 使用Token前添加格式化处理,去除前后冗余字符:
    const token = cookie?.trim();
    Authorization: `Bearer ${token}`
    
  • 调用接口前打印Token值,对比iOS端输出,确认两者完全一致:
    console.log('Android Token:', cookie);
    

2. Axios请求头平台差异

部分Android环境下,axios对请求头的处理存在隐性差异(如头字段大小写转换、编码问题),导致Authorization头未被正确传递。

修复:

  • 改用axios实例化方式统一配置请求头,避免重复设置的潜在问题:
    // 创建全局axios实例
    const apiClient = axios.create({
      baseURL: '你的API基础地址',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
      },
      withCredentials: false,
    });
    
    // 登录成功后统一设置授权头
    apiClient.defaults.headers.common['Authorization'] = `Bearer ${token.trim()}`;
    
    // 重构请求封装函数
    export const poster = async ({url, method = 'POST', body}: PosterType) => {
      try {
        const response = await apiClient({url, method, data: body});
        const data = response.data;
        if (response.status >= 400) {
          throw new Error(data.message ?? data?.error?.message ?? '请求失败');
        }
        return data;
      } catch (error) {
        console.error('请求错误详情:', error);
        throw error;
      }
    };
    

3. 网络层拦截或请求篡改

Android端的网络请求可能被系统安全策略、第三方库(如React Native网络模块)或代理工具修改,导致Authorization头丢失或Token被篡改。

修复:

  • 用Charles/Fiddler抓包查看Android端实际请求,确认Authorization头是否存在且Token正确。
  • 检查AndroidManifest.xml的网络权限配置,确保无请求头限制:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 排查项目中自定义的网络拦截器(如axios.interceptors),确认其未修改Authorization头。

4. 时间同步或服务器解析差异

Android设备系统时间与服务器时间偏差过大,导致Token过期校验失败;或服务器因Android端请求的User-Agent差异,存在特殊解析逻辑导致Token验证不通过。

修复:

  • 将Android设备系统时间同步到网络时间,确保与服务器时区一致。
  • 统一请求头中的User-Agent,消除平台差异:
    headers: {
      // ...其他请求头
      'User-Agent': 'YourAppName/1.0.0'
    }
    

关键排查步骤

  1. 抓包对比Android和iOS端的请求头,确认Authorization字段的一致性。
  2. 打印并对比两端的Token值,排除格式差异。
  3. 检查设备时间与服务器时间的同步性。
  4. 排查项目中的网络拦截器或第三方库对请求的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:43:12