You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:57:48