升级Python SDK至v10后调用API遇TypeError参数错误
问题解决:TypeError: Session.request() got an unexpected keyword argument 'version'
核心原因
你调用的是原生requests库的get方法,但该方法并不支持version参数。之前的代码可能依赖某个封装DX API的第三方SDK,升级至v10后,你误将SDK的参数用法套用到了原生requests上,导致报错。
解决方案
方案1:使用对应的DX SDK(推荐)
代码中设置了DX_GATEWAY、DX_CLIENT_ID等环境变量,说明你应该使用官方提供的DX SDK v10来调用API,而非直接用原生requests。示例大致如下(具体以SDK官方文档为准):
import os import json from dx_sdk import DXClient # 替换为实际的SDK导入路径 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 # 初始化SDK客户端 client = DXClient() path = "/path/to/api" params = { "Type": "abc", "Id": "def", "limit": 999, "Category": "abc" } # 按SDK文档传递版本参数 vulns = client.get(path, params=params, version=1) if vulns.status_code != int(HTTPStatus.OK): raise RuntimeError("API call did not return expected response: " + str(vulns)) response_data = vulns.json() print(json.dumps(response_data))
方案2:直接用原生requests调用(适配API版本控制)
如果坚持用原生requests,API版本通常通过以下两种方式传递,而非version参数:
- URL路径嵌入版本:
修改path为带版本的路径,同时利用requests的params参数自动处理参数拼接:path = "/v1/path/to/api" # 将版本v1嵌入API路径 params = { "Type": "abc", "Id": "def", "limit": 999, "Category": "abc" } vulns = requests.get( url=f"{os.environ['DX_GATEWAY']}{path}", params=params ) - 请求头传递版本:
如果API要求通过请求头指定版本:path = "/path/to/api" params = { "Type": "abc", "Id": "def", "limit": 999, "Category": "abc" } vulns = requests.get( url=f"{os.environ['DX_GATEWAY']}{path}", params=params, headers={"API-Version": "1"} # 替换为API要求的版本头字段 )
额外优化点
你手动拼接URL参数的方式容易因特殊字符未转义导致错误,建议直接使用requests.get的params参数,requests会自动处理参数编码和拼接逻辑。
内容的提问来源于stack exchange,提问作者user19378169
相关产品推荐
相关产品推荐

