Python函数间传递Token遇过期更新失效问题求助
问题解决:Token过期后无法更新全局变量导致接口调用失败
问题根源
- 原代码检测到Token过期时,仅调用
producttoken()获取新Token,但未将返回值赋值给全局变量tokens,后续请求仍使用旧Token product_delete函数内未声明tokens为全局变量,无法修改全局的tokens值
修改后的完整代码
import requests import json def producttoken(): url = "https://productapi.com/tokens" payload = json.dumps({ "Username": "*", "AppKey": "USER", "Hash": "hzh8123sdgxzc123sdfdfhI1tOY=" }) headers = {'Content-Type': 'application/json'} response = requests.request("POST", url, headers=headers, data=payload) jtoken = json.loads(response.text) token = jtoken['token'] print("token taken") return token tokens = producttoken() counter = 0 def product_delete(product_id): global tokens # 声明使用全局变量tokens product_delete_url = f"https://productapi.com/products/id/{product_id}" headers = { 'authorization': f"Token {tokens}", # 修复授权头格式,添加空格 'cache-control': "no-cache", } response = requests.request("DELETE", product_delete_url, headers=headers) r = response.text if "expired_token" in r: print("token renewed") tokens = producttoken() # 更新全局Token # 使用新Token重新发起请求 headers['authorization'] = f"Token {tokens}" response = requests.request("DELETE", product_delete_url, headers=headers) r = response.text print(r) return r with open('list.csv','r') as f: # 用with语句安全处理文件 for line in f: line = line.rstrip('\n') product_id = line.split(';')[0] counter += 1 product_delete(product_id) print(counter)
关键修改说明
- 添加
global tokens声明:让函数有权修改全局的tokens变量 - 更新全局Token:检测到过期时,将新获取的Token赋值给
tokens - 重试请求:更新Token后重新发起DELETE请求,确保当前产品ID能被正常处理
- 修复授权头格式:原代码
"Token"+tokens缺少空格,不符合标准授权格式,改为f"Token {tokens}" - 使用
with语句处理文件:自动管理文件关闭,避免资源泄漏
内容的提问来源于stack exchange,提问作者tcblue
相关产品推荐
相关产品推荐

