2

だから私はこれを得た

public class VirusTotal
{
    public string APIKey;
    string scan = "https://www.virustotal.com/api/scan_file.json";
    string results = "https://www.virustotal.com/api/get_file_report.json";

    public VirusTotal(string apiKey)
    {
        ServicePointManager.Expect100Continue = false;
        APIKey = apiKey;
    }

    public string Scan(string file)
    {
        var v = new NameValueCollection();
        v.Add("key", APIKey);
        var c = new WebClient() { QueryString = v };
        c.Headers.Add("Content-type", "binary/octet-stream");
        byte[] b = c.UploadFile(scan, "POST", file);
        var r = ParseJSON(Encoding.Default.GetString(b));
        if (r.ContainsKey("scan_id"))
        {
            return r["scan_id"];
        }
        throw new Exception(r["result"]);
    }

    public string GetResults(string id)
    {
        Clipboard.SetText(id);
        var data = string.Format("resource={0}&key={1}", id, APIKey);
        var c = new WebClient();
        string s = c.UploadString(results, "POST", data);
        var r = ParseJSON(s);
        foreach (string str in r.Values)
        {
            MessageBox.Show(str);
        }
        if (r["result"] != "1")
        {
            throw new Exception(r["result"]);
        }
        return s;
    }

    private Dictionary<string, string> ParseJSON(string json)
    {
        var d = new Dictionary<string, string>();
        json = json.Replace("\"", null).Replace("[", null).Replace("]", null);
        var r = json.Substring(1, json.Length - 2).Split(',');
        foreach (string s in r)
        {
            d.Add(s.Split(':')[0], s.Split(':')[1]);
        }
        return d;
    }
}

しかし、URL を入力すると、それがスキャンであると思いますが、スキャンを取得してスキャン プロセスを開始するにはどうすればよいですか

申し訳ありませんが、私はAPIの初心者であり、あなたの助けのためにwebclient thxを実際に取得していません

4

1 に答える 1

3

ここで実際に URL を指定する必要はありません。

スキャンのためにファイルをアップロードすると、VirusTotal によって生成された一意のリクエスト ID が返されます。その ID はScan関数の戻り値です。この値を変数に格納し、呼び出しで指定すると、GetResults結果が得られます。

コードは次のようになります。

VirusTotal vtObject = new VirusTotal("%Your_API_key_here%");
string resultID = vtObject.Scan("%your_file_name_here%");
string results = vtObject.GetResults(resultID);

また、ファイルのスキャンには時間がかかるため、「スキャンのためにファイルがキューに入れられました。後で戻ってきます」のようなメッセージが表示される可能性が高いことに注意してくださいresultsGetResultsVT がファイルを処理した後に実際のスキャン データを取得できるように、一定の時間間隔を置いて後で呼び出すことができます。

于 2012-09-12T08:03:57.023 に答える