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

如何在Django测试中读取请求头?APIClient遇401授权问题

Django APIClient 设置请求头后返回401未授权问题

在使用Django的APIClient进行测试时,设置请求头后接口返回401未授权状态,已排查数小时仍无法解决,请求帮助。

代码示例

self.client = APIClient()
self.jwt = response.json()["access"]
self.client.credentials(HTTP_AUTHORIZATION='Bearer ' + self.jwt)
self.client.headers.update({'Origin': 'https://travelingapps.com.co'})

返回结果

('status_code', 401), ('content_type', 'application/json'), ('content', 'UNAUTHORIZED')

排查方向

  • 验证JWT令牌有效性:打印self.jwt确认获取到的是有效令牌,或通过JWT解码工具检查令牌的过期时间、签名是否符合后端要求。
  • 直接在请求时传递请求头:APIClient的credentials()方法有时可能被其他逻辑覆盖,尝试在发起请求时通过headers参数直接指定所有需要的头信息:
    response = self.client.get(
        '/目标接口路径/',
        headers={
            'Authorization': f'Bearer {self.jwt}',
            'Origin': 'https://travelingapps.com.co'
        }
    )
    
  • 检查Origin头的合法性:确认后端是否对Origin头做了白名单校验,确保设置的https://travelingapps.com.co在后端允许的列表中,注意域名的大小写、是否带斜杠等细节。
  • 排查中间件干扰:如果项目中有自定义认证中间件或CSRF中间件,尝试临时禁用相关中间件测试,确认是否是中间件修改了请求头或拦截了请求。
  • 打印请求头确认:在测试中输出实际发送的请求头,确认Authorization和Origin是否被正确携带:
    # 用RequestFactory模拟请求,查看头信息
    from django.test.client import RequestFactory
    factory = RequestFactory()
    test_request = factory.get(
        '/目标接口路径/',
        headers={
            'Authorization': f'Bearer {self.jwt}',
            'Origin': 'https://travelingapps.com.co'
        }
    )
    print(test_request.headers)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:01:00