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

如何修复API请求返回426(Protocol Upgrade Required)错误

解决requests请求返回426 Protocol Upgrade Required的问题

首先,先修正你代码里的一个明显错误:headers字典中'user-agent '的键末尾多了一个空格,这会导致User-Agent头无法被服务器正确识别,这很可能是触发426错误的原因之一。先把这个空格去掉:

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}

如果修正后仍然返回426,核心原因是服务器要求升级协议,而requests库默认仅支持HTTP/1.1,你的浏览器大概率自动使用了HTTP/2访问该API,所以能正常获取结果。以下是具体解决步骤:

  • 改用支持HTTP/2的客户端库:
    requests本身不支持HTTP/2,你可以使用httpx库,它原生支持HTTP/2协议。安装后按以下方式请求:

    import httpx
    
    # 创建支持HTTP/2的客户端
    with httpx.Client(http2=True) as client:
        response = client.get(myApi, headers=headers, auth=user_name_password)
        print(response.status_code)
        print(response.text)
    
  • 检查服务器要求的升级协议:
    先打印服务器返回的响应头,确认它要求升级到哪种协议:

    req = requests.get(myApi, headers=headers, auth=user_name_password)
    # 查看Upgrade和Connection字段
    print("Upgrade:", req.headers.get("Upgrade"))
    print("Connection:", req.headers.get("Connection"))
    

    如果返回的Upgrade值是h2c(明文HTTP/2),那上面的httpx方案就能解决;如果是其他协议(比如WebSocket),则需要对应调整请求方式。

  • 验证认证方式是否匹配:
    虽然你在浏览器输入用户名密码能正常访问,但要确认浏览器使用的是Basic Auth还是其他认证方式(比如表单提交后获取Cookie)。如果是后者,你需要先模拟浏览器的登录流程获取Cookie,再携带Cookie发起API请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:22