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

Python使用requests获取OAuth2 access token连接报错如何解决

问题原因说明
  • 未触发NameError的原因:你预想的NameError应该是认为api_call_response定义在while循环内部,外部访问会抛出变量未定义错误,但由于你的while是无终止条件的无限死循环,程序永远不会执行到循环外的if判断逻辑,因此不会触发该报错。
  • ConnectionError直接成因:报错信息显示程序实际请求的是www.webapi.com的80端口,和你代码中写的webapi.comHTTPS(默认443端口)地址不一致,说明要么你实际运行的代码和贴出的示例不一致,要么目标域名配置了强制跳转,跳转到了带www前缀的HTTP地址,你的网络环境无法和该地址建立连接,常见触发场景包括:
    • 本地网络防火墙、代理规则限制了对该域名的访问
    • 目标域名解析错误、对应服务未部署、端口未对外开放
    • 你代码中填写的域名是测试占位地址,没有实际可用的服务
  • 代码隐藏的缩进错误:api_call_response的状态码判断逻辑完全写在while True循环外部,就算网络正常,程序也会无限调用业务API,永远不会执行token刷新和响应打印逻辑。
修复方案
  1. 先修正代码缩进、添加超时和请求间隔,避免语法逻辑问题:
import sys
import requests
import json
import logging
import time

logging.captureWarnings(True)
# 确认该地址为实际可用的业务接口地址
api_url = "https://webapi.com/api/v1/data"

def get_new_token():
    # 确认该地址为实际可用的token获取接口地址
    acc_token_url = "https://webapi.com/connect/accesstoken"
    client_id = '替换为实际的client_id'
    client_secret = '替换为实际的client_secret'
    token_req_payload = {'grant_type': 'client_credentials'}
    # 添加超时参数避免长时间无响应
    token_response = requests.post(
        acc_token_url, 
        data=token_req_payload, 
        verify=False, 
        allow_redirects=False, 
        auth=(client_id, client_secret),
        timeout=10
    )
             
    if token_response.status_code != 200:
       print("从OAuth2服务器获取token失败", file=sys.stderr)
       sys.exit(1)
    print("成功从OAuth2服务器获取新token")
    tokens = json.loads(token_response.text)
    return tokens['access_token']

token = get_new_token()

while True:    
    api_call_headers = {'Authorization': 'Bearer ' + token}
    api_call_response = requests.get(
        api_url, 
        headers=api_call_headers, 
        verify=False,
        timeout=10
    )
    # 状态判断逻辑缩进调整到循环内部
    if api_call_response.status_code == 401:
        token = get_new_token()
    else:
        print(api_call_response.text)
    # 添加调用间隔,避免请求频率过高被服务端拦截
    time.sleep(1)
  1. 排查网络连接问题:
    • 先使用curl、Postman等工具手动调用token接口和业务接口,确认接口本身可以正常访问
    • 检查本地是否开启了代理、防火墙是否拦截了对应域名的请求
    • 确认接口服务商是否要求将你的出口IP添加到白名单才能正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:42:00