在py-vt中获取文件扫描时遇404 APIError的求助
解决py-vt扫描本地文件时的404错误及正确操作方法
错误原因
你用client.get_object()传入本地文件路径是完全错误的——这个方法的作用是从VirusTotal API获取已存在的资源信息(比如已知文件的哈希对应的扫描报告、URL分析结果等),而非上传本地文件进行扫描。直接传本地路径给它,API找不到对应资源,自然返回404。
正确的本地文件扫描步骤
要扫描本地文件,需要使用client.scan_file()方法上传文件并触发扫描,以下是修正后的完整代码:
import vt # 替换为你的VirusTotal API密钥 API_KEY = "mytoken" # 本地文件路径 TARGET_FILE = "C:/Users/PC/Desktop/PyPhisher-main/PyPhisher-main/pyphisher.py" # 使用with语句自动管理客户端和文件资源,避免未关闭会话警告 with vt.Client(API_KEY) as client: with open(TARGET_FILE, "rb") as file_obj: # 上传文件并触发扫描,wait_for_completion=True会等待扫描完成再返回 scan_result = client.scan_file(file_obj, wait_for_completion=True) # 获取完整的扫描报告 file_report = client.get_object(f"/files/{scan_result.id}") # 打印关键扫描信息 print(f"文件SHA-256哈希: {scan_result.id}") print(f"扫描状态: {scan_result.status}") print(f"检测统计: {file_report.last_analysis_stats}")
关键说明
scan_file()方法接收二进制文件对象作为参数,必须以rb模式打开文件。wait_for_completion=True会阻塞直到扫描完成,适合小文件;如果是大文件或不想等待,可设为False,之后通过client.get_object(f"/analyses/{scan_result.id}")轮询扫描状态。- 使用
with语句管理vt.Client和文件对象,自动关闭资源,解决你遇到的「Unclosed client session」警告。 - 免费版VirusTotal API有请求速率限制,注意控制调用频率。
内容的提问来源于stack exchange,提问作者HzStark
相关产品推荐
相关产品推荐

