Python SDK升级至v10后API请求报AttributeError问题求助
问题解决思路:requests SDK升级后API调用报错处理
错误根源分析
你错误地使用了requests.Request()对象:
requests.Request()是用来构建单个请求结构体的类,本身并没有get方法,get是requests模块的顶层方法或requests.Session对象的方法。- 你尝试的
args.get完全是混淆了Web框架(如Flask)的请求对象属性,和requests库的Request对象毫无关系。
修正方案(两种常用写法)
方案1:直接使用requests顶层方法(单次请求场景)
import os import json import requests from http import HTTPStatus client_id = "" client_secret = "" os.environ["DX_GATEWAY"] = "http://api.com" os.environ["DX_CLIENT_ID"] = client_id os.environ["DX_CLIENT_SECRET"] = client_secret # 拼接完整基础URL base_url = os.environ["DX_GATEWAY"] path = "/path/to/api" full_url = base_url + path params = { "Type": "abc", "Id": "def", "limit": 999, "Category": "abc" } # 直接调用requests.get,params参数自动拼接URL查询字符串,无需手动处理 vulns = requests.get( full_url, params=params, # 若API需要client_id/secret认证,添加auth参数(根据实际API要求调整) auth=(client_id, client_secret) ) if vulns.status_code != HTTPStatus.OK: raise RuntimeError(f"API调用失败,状态码: {vulns.status_code},响应内容: {vulns.text}") response_data = vulns.json() print(json.dumps(response_data, indent=2))
方案2:使用Session对象(多次请求复用场景)
如果需要频繁调用API,用Session可以复用连接池,提升效率:
import os import json import requests from http import HTTPStatus client_id = "" client_secret = "" os.environ["DX_GATEWAY"] = "http://api.com" os.environ["DX_CLIENT_ID"] = client_id os.environ["DX_CLIENT_SECRET"] = client_secret # 创建Session对象,全局设置认证等参数 dx_session = requests.Session() dx_session.auth = (client_id, client_secret) base_url = os.environ["DX_GATEWAY"] path = "/path/to/api" full_url = base_url + path params = { "Type": "abc", "Id": "def", "limit": 999, "Category": "abc" } vulns = dx_session.get( full_url, params=params ) if vulns.status_code != HTTPStatus.OK: raise RuntimeError(f"API调用失败,状态码: {vulns.status_code},响应内容: {vulns.text}") response_data = vulns.json() print(json.dumps(response_data, indent=2))
额外注意事项
- 不要手动拼接URL参数:
params参数会自动处理编码和拼接,避免特殊字符导致的错误。 - 确认
version=1的传递方式:如果是API版本参数,通常会放在URL路径(如/v1/path/to/api)或请求头中,而非get方法的参数——requests原生没有version参数,需对照API文档调整。 - 检查基础URL格式:确保
DX_GATEWAY和path拼接后没有重复斜杠(如http://api.com//path)。
内容的提问来源于stack exchange,提问作者user19378169
相关产品推荐
相关产品推荐

