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

调用VirusTotal API遭遇403 Forbidden错误,寻求问题排查方案

VirusTotal API V2 返回403 Forbidden 错误的排查与V3版本替代方案

问题背景

按照VirusTotal V2 API的URL扫描示例编写代码后,运行返回Response [403]禁止访问错误,已反复确认API密钥无误,需排查错误成因。

原V2版本代码:

import requests
minute = 60
from time import sleep
file = open("url.txt","r") #url file contains all URLs
lines = file.readlines()
file.close()
for line in lines:
    url = "http://" + line[:-3] #Added that because my URLs didn't have http:// at the beggining and contained "Â" at the end because of encoding
    params = {'apikey': 'my_API_key', 'url':url} # My API key is written inside the '' as such '123456'
    response = requests.post(url, data=params)
    responsesFile = open("Responses.txt","w")
    responsesFile.write(str(response))
    sleep(5*minute)

403错误的核心成因

  • API端点完全错误:原代码里requests.post(url, data=params)的url是要扫描的目标网址,不是VirusTotal的API接口地址。V2版本的URL扫描端点应为https://www.virustotal.com/vtapi/v2/url/scan,直接请求目标网站自然会被对方服务器拒绝,返回403。
  • 请求逻辑错误:V2 API要求把apikey和url作为POST参数提交到官方API端点,原代码完全搞反了请求目标,根本没和VirusTotal的服务器做权限校验,必然返回禁止访问。
  • V2 API潜在限制:VirusTotal的V2 API可能已逐步缩减支持,部分功能存在访问限制,即使密钥正确也可能触发403。
  • URL处理不当:line[:-3]的截取逻辑可能导致URL格式损坏,比如截断有效字符或残留特殊符号,触发目标网站的反爬机制返回403。

可用的V3版本替代代码

改用VirusTotal API V3版本后可正常运行,基础实现代码如下:

import requests
import json

headers = {'x-apikey': 'VT_API_KEY'}
resource = "https://www.lacoste.com"
endpoint = "https://www.virustotal.com/api/v3/urls"
response = requests.post(endpoint, headers=headers, data={'url': resource})

print(response.json())

analysis_id = response.json()['data']['id']
analysis_url = f"https://www.virustotal.com/api/v3/analyses/{analysis_id}"
response = requests.get(analysis_url, headers=headers)
response_json = response.json()
print(response_json)

版本差异说明

V3版本API通过x-apikey请求头传递密钥,而非V2的POST参数,端点路径也完全不同,更符合现代API设计规范,且VirusTotal官方目前更推荐使用V3版本。

内容的提问来源于stack exchange,提问作者Wosiru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58