Python实现VirusTotal API Key验证:如何循环重试校验?
VirusTotal API Key 验证代码问题解析与修复
代码存在的错误
- 函数
auth_vt_apikey仅定义了文档字符串,未包含任何校验逻辑,调用该函数完全无效 - 校验流程仅执行一次:输入错误API Key后,仅重新获取输入但未再次发起验证请求,程序直接终止
- 代码结构混乱:核心校验逻辑都在函数外部,不符合代码封装的基本规范
- 有效性判断不准确:仅通过响应状态码200判断API Key是否有效,VirusTotal在Key无效时仍可能返回200,但响应内容会包含错误提示
改进建议
- 将所有校验逻辑封装到
auth_vt_apikey函数中,提升代码可复用性 - 使用
while循环实现重复校验,直到用户输入有效的API Key - 结合响应内容判断有效性,避免状态码误判
- 增加输入空值的处理,防止用户误输入空字符串
修正后的代码
import requests def auth_vt_apikey(): """验证VirusTotal API Key的有效性""" api_key = '' # 循环校验直到输入有效Key while True: if not api_key: api_key = input("请输入你的VirusTotal API Key: ").strip() # 处理空输入 if not api_key: print("API Key不能为空,请重新输入") continue # 发起验证请求,使用简单的文件扫描查询端点 url = 'https://www.virustotal.com/vtapi/v2/file/report' params = {'apikey': api_key, 'resource': 'dummy_hash'} # dummy_hash用于触发API验证 try: response = requests.get(url, timeout=10) response.raise_for_status() # 处理HTTP错误状态码 result = response.json() # 根据响应内容判断Key是否有效 if result.get('response_code') == -2: # response_code=-2表示资源不存在,但API Key有效(因为能正常返回API响应) print("你的API Key验证通过") return api_key elif result.get('verbose_msg') == 'Invalid API key': print("API Key无效,请重新输入") api_key = '' # 重置api_key,触发重新输入 else: print(f"验证过程出现未知错误: {result.get('verbose_msg')}") api_key = '' except requests.exceptions.RequestException as e: print(f"请求失败: {str(e)}") api_key = '' # 调用函数执行验证 valid_api_key = auth_vt_apikey()
相关学习指南
- Python循环结构:学习
while循环的使用场景,掌握如何通过循环实现重复执行的逻辑 - 函数封装:了解如何将重复使用的逻辑封装为函数,提升代码的可读性和复用性
- requests库使用:学习HTTP请求的发送方式,如何处理响应、异常情况,以及解析JSON格式的响应内容
- API响应解析:学会根据API文档返回的结构,通过键值对提取关键信息,准确判断请求结果
内容的提问来源于stack exchange,提问作者k1np3r
相关产品推荐
相关产品推荐

