如何从API获取Token并传递至另一API?解决调用报错问题
问题分析与解决方案
错误原因
你遇到的TypeError: 'str' object is not callable是因为**requests.get的auth参数用法错误**:
auth参数仅用于HTTP基础认证,要求传入(用户名, 密码)格式的元组;- 你传入的字符串类型Token并不符合该参数的要求,因此触发报错。
Bearer Token的正确传递方式是将其放在请求头的Authorization字段中,格式为Bearer <你的Token>。
修正后的代码
import requests # 1. 获取认证Token url_auth = 'https://api.com/token' payload_auth = {'grant_type': 'client'} username = "username" password = "password" response_auth = requests.post(url_auth, auth=(username, password), data=payload_auth) response_auth.raise_for_status() # 新增:校验认证请求是否成功,避免后续无Token报错 data = response_auth.json() access_token = data["access_token"] print(access_token) # 2. 调用第二个API url_ref = 'https://api.com/api/operation/consult' payload_ref = [ { "operation": "1", "Reference": "DDD", "Status": "1" } ] # 构造带Token的请求头 headers = {'Authorization': f'Bearer {access_token}'} # 注意:GET请求不建议用请求体传数据,请确认API实际要求的请求方法 # 如果是POST请求(更符合传JSON体的场景) response_ref = requests.post(url_ref, headers=headers, json=payload_ref) # 如果确实是GET请求,需将数据转为URL参数(极少有API这么设计) # response_ref = requests.get(url_ref, headers=headers, params={'payload': json.dumps(payload_ref)}) # 校验请求结果 response_ref.raise_for_status() print(response_ref.json())
额外注意事项
- 请求方法校验:原代码用
requests.get却传递data参数不符合HTTP规范(GET请求通常通过URL参数传数据),请确认第二个API的实际请求方法,对应调整代码。 - 自动JSON处理:使用
requests.post的json参数时,会自动设置Content-Type: application/json请求头,无需手动序列化JSON。 - 异常排查:
response.raise_for_status()会在请求返回4xx/5xx状态码时直接抛出异常,便于快速定位问题。
内容的提问来源于stack exchange,提问作者CED
相关产品推荐
相关产品推荐

