You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

切换API网站至HTTPS后出现401授权错误,该如何排查?

问题排查与解决方案

仅将请求地址从HTTP改为HTTPS本身不需要修改Authorization请求头的格式,但出现401错误通常和以下几个隐藏因素有关,逐一排查即可:

1. 重定向过程中授权头丢失

如果原HTTP地址存在自动重定向到HTTPS的逻辑,即便你直接修改了请求地址为HTTPS,部分服务器仍会触发重定向。而requests默认在301/302重定向时,不会将Authorization头携带到新的请求中,导致服务器无法验证权限。

解决方法:禁用自动重定向,手动处理重定向并携带授权头:

def fetchAPIList():
    try:
        # 先禁用自动重定向
        response = requests.get("https://website/api/list", 
                               headers={"Authorization": f'Bearer {key}'},
                               allow_redirects=False)
        # 若触发重定向,手动发起新请求并携带授权头
        if response.status_code in [301, 302]:
            response = requests.get(response.headers['Location'], 
                                   headers={"Authorization": f'Bearer {key}'})
        return response.json()
    except Exception as e:
        print(e)
        raise e

2. 服务器端授权配置变更

切换HTTPS后,服务器可能同步更新了授权验证规则:

  • 原授权密钥仅允许HTTP协议访问,需重新生成适配HTTPS环境的密钥;
  • 服务器修改了授权头的名称(比如从Authorization改为X-Auth-Token);
  • 新增了其他必须的请求头(如X-Forwarded-Proto来标识协议类型)。

解决方法:检查API服务器的配置文档或联系运维人员,确认HTTPS环境下的授权规则是否变化。

3. 证书验证的间接影响

如果服务器使用自签名证书,requests默认会严格验证证书有效性,验证失败可能引发异常,但部分场景下会间接导致请求逻辑异常,表现为401错误。

排查方法:临时关闭证书验证(仅用于测试,生产环境禁止):

def fetchAPIList():
    try:
        response = requests.get("https://website/api/list", 
                               headers={"Authorization": f'Bearer {key}'},
                               verify=False)
        return response.json()
    except Exception as e:
        print(e)
        raise e

若关闭验证后请求正常,说明需配置正确的CA证书路径:

# 替换为实际的CA证书文件路径
response = requests.get(url, headers=headers, verify="/path/to/your/ca.crt")

4. 查看请求细节定位差异

通过打印请求日志,对比HTTPS请求与原HTTP请求的头信息、响应细节,找出差异点:

import requests
import logging

# 开启DEBUG日志,查看完整请求/响应内容
logging.basicConfig(level=logging.DEBUG)

def fetchAPIList():
    try:
        session = requests.Session()
        response = session.get("https://website/api/list", 
                               headers={"Authorization": f'Bearer {key}'})
        return response.json()
    except Exception as e:
        print(e)
        raise e

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

火山引擎 最新活动