您不需要解析VirusTotal的HTML,它們具有旨在供計算機使用的API端點。可以在https://developers.virustotal.com/v2.0/reference
中找到文檔您甚至可以使用現有的庫,通過NuGet包VirusTotal.NET
爲您包裝所有內容,以便您可以調用一個類並且它可以工作。
這裏是如何使用它
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using VirusTotalNET.Objects;
using VirusTotalNET.ResponseCodes;
using VirusTotalNET.Results;
namespace VirusTotalNET.Client
{
class Program
{
private const string ScanUrl = "http://www.google.com/";
static void Main(string[] args)
{
RunExample().Wait();
Console.WriteLine("Press a key to continue");
Console.ReadLine();
}
private static async Task RunExample()
{
VirusTotal virusTotal = new VirusTotal("YOUR API KEY HERE");
//Use HTTPS instead of HTTP
virusTotal.UseTLS = true;
//Create the EICAR test virus. See http://www.eicar.org/86-0-Intended-use.html
FileInfo fileInfo = new FileInfo("EICAR.txt");
File.WriteAllText(fileInfo.FullName, @"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*");
//Check if the file has been scanned before.
FileReport fileReport = await virusTotal.GetFileReport(fileInfo);
bool hasFileBeenScannedBefore = fileReport.ResponseCode == ReportResponseCode.Present;
Console.WriteLine("File has been scanned before: " + (hasFileBeenScannedBefore ? "Yes" : "No"));
//If the file has been scanned before, the results are embedded inside the report.
if (hasFileBeenScannedBefore)
{
PrintScan(fileReport);
}
else
{
ScanResult fileResult = await virusTotal.ScanFile(fileInfo);
PrintScan(fileResult);
}
Console.WriteLine();
UrlReport urlReport = await virusTotal.GetUrlReport(ScanUrl);
bool hasUrlBeenScannedBefore = urlReport.ResponseCode == ReportResponseCode.Present;
Console.WriteLine("URL has been scanned before: " + (hasUrlBeenScannedBefore ? "Yes" : "No"));
//If the url has been scanned before, the results are embedded inside the report.
if (hasUrlBeenScannedBefore)
{
PrintScan(urlReport);
}
else
{
UrlScanResult urlResult = await virusTotal.ScanUrl(ScanUrl);
PrintScan(urlResult);
}
}
private static void PrintScan(UrlScanResult scanResult)
{
Console.WriteLine("Scan ID: " + scanResult.ScanId);
Console.WriteLine("Message: " + scanResult.VerboseMsg);
Console.WriteLine();
}
private static void PrintScan(ScanResult scanResult)
{
Console.WriteLine("Scan ID: " + scanResult.ScanId);
Console.WriteLine("Message: " + scanResult.VerboseMsg);
Console.WriteLine();
}
private static void PrintScan(FileReport fileReport)
{
Console.WriteLine("Scan ID: " + fileReport.ScanId);
Console.WriteLine("Message: " + fileReport.VerboseMsg);
if (fileReport.ResponseCode == ReportResponseCode.Present)
{
foreach (KeyValuePair<string, ScanEngine> scan in fileReport.Scans)
{
Console.WriteLine("{0,-25} Detected: {1}", scan.Key, scan.Value.Detected);
}
}
Console.WriteLine();
}
private static void PrintScan(UrlReport urlReport)
{
Console.WriteLine("Scan ID: " + urlReport.ScanId);
Console.WriteLine("Message: " + urlReport.VerboseMsg);
if (urlReport.ResponseCode == ReportResponseCode.Present)
{
foreach (KeyValuePair<string, ScanEngine> scan in urlReport.Scans)
{
Console.WriteLine("{0,-25} Detected: {1}", scan.Key, scan.Value.Detected);
}
}
Console.WriteLine();
}
}
}
*尋求調試幫助(「爲什麼不是這個代碼的工作?」)問題必須包括所期望的行爲,一個具體問題庫中的GitHub的頁面一個例子或錯誤以及在問題本身中重現問題所需的最短代碼* –