Error Handling VirusTotal API dengan Python: Panduan Teknis

Penanganan Error API VirusTotal

Saat berinteraksi dengan API VirusTotal menggunakan Python, tantangan utama adalah menangani batasan kuota (rate limiting) dan kegagalan koneksi jaringan. VirusTotal menggunakan kode status HTTP standar untuk mengomunikasikan hasil permintaan. Implementasi try-except yang dikombinasikan dengan pengecekan status kode adalah standar industri untuk menjaga stabilitas skrip otomatisasi Anda.

Kode Implementasi Penanganan Error

Gunakan pustaka requests untuk menangani respons API. Berikut adalah pola implementasi yang disarankan untuk menangani error umum seperti 429 (Too Many Requests) dan 403 (Forbidden).

import requests
import time

def get_report(api_key, resource_id):
    url = f"https://www.virustotal.com/api/v3/files/{resource_id}"
    headers = {"x-apikey": api_key}
    
    try:
        response = requests.get(url, headers=headers, timeout=10)
        
        if response.status_code == 200:
            return response.json()
        elif response.status_code == 429:
            print("Rate limit terlampaui. Menunggu 60 detik...")
            time.sleep(60)
            return get_report(api_key, resource_id)
        elif response.status_code == 403:
            raise Exception("API Key tidak valid atau tidak memiliki akses.")
        else:
            response.raise_for_status()
            
    except requests.exceptions.RequestException as e:
        print(f"Terjadi kesalahan koneksi: {e}")
        return None

Tabel Kode Status HTTP VirusTotal

Kode StatusPenyebabTindakan
200SuksesProses data JSON
400Bad RequestPeriksa format parameter
401UnauthorizedAPI Key salah/kosong
403ForbiddenAkses ditolak/Premium only
404Not FoundHash tidak ditemukan
429Too Many RequestsImplementasikan backoff/delay

Strategi Troubleshooting

  • Implementasi Exponential Backoff: Jangan hanya menunggu waktu statis saat menerima error 429. Gunakan peningkatan waktu tunggu secara eksponensial untuk menghindari pemblokiran IP.
  • Validasi Timeout: Selalu sertakan parameter timeout pada fungsi requests.get() untuk mencegah skrip menggantung (hang) saat server VirusTotal mengalami latensi tinggi.
  • Logging: Gunakan modul logging bawaan Python alih-alih print() untuk mencatat error ke dalam file, sehingga memudahkan audit jika terjadi kegagalan sistem di masa depan.
  • Verifikasi API Key: Pastikan API Key disimpan dalam variabel lingkungan (environment variables) dan tidak di-hardcode di dalam skrip untuk alasan keamanan.