Как использовать Google Safe Browsing (v4) с .NET

Я пытаюсь использовать API поиска безопасного просмотра Google (v4, https://developers.google.com/safe-browsing/v4/lookup-api) с приложением .NET и возникли проблемы с поиском примера кода.

Я установил пакет Nuget от Google, но не смог найти примеров в их репозитории на github по адресу https://github.com/google/google-api-dotnet-client.

Лучший пример, который я смог найти, был на https://developers.google.com/api-client-library/dotnet/get_started, но даже это не показывает мне, что именно я ищу. Я просто хочу узнать, каков статус URL-адреса. Ниже приведен единственный пример, который я нашел в Google.

        // Create the service.
        var service = new DiscoveryService(new BaseClientService.Initializer
            {
                ApplicationName = "Discovery Sample",
                ApiKey="[YOUR_API_KEY_HERE]",
            });

        // Run the request.
        Console.WriteLine("Executing a list request...");
        var result = await service.Apis.List().ExecuteAsync();

        // Display the results.
        if (result.Items != null)
        {
            foreach (DirectoryList.ItemsData api in result.Items)
            {
                Console.WriteLine(api.Id + " - " + api.Title);
            }
        }

Я также попробовал обертку https://github.com/acastaner/safebrowsinglookup, которая выглядела довольно простой, используя

 var client = new LookupClient("key", "dotnet-client");
 var response = await client.LookupAsync("http://amazon.com");

Но каждый раз это возвращалось «неизвестно». Я убедился, что зарегистрировал новый ключ в Google и дал ему доступ к Google Safe Browsing Api 4.

Любые предложения о том, как использовать API Google, чтобы просто получить ответ одного или нескольких URL-адресов?

Ценить это!


person Alex J    schedule 11.04.2018    source источник


Ответы (2)


После проб и ошибок я наконец понял это.

Мой исходный код пытался использовать LookupClient, что не сработало для меня. Я нашел решение, посмотрев, как Google инициализирует свою службу обнаружения, и оттуда построил FindthreatMatchesRequest()

        var service = new SafebrowsingService(new BaseClientService.Initializer
        {
            ApplicationName = "dotnet-client",
            ApiKey = "API-KEY"
        });

        var request = service.ThreatMatches.Find(new FindThreatMatchesRequest()
        {
            Client = new ClientInfo
            {
                ClientId = "Dotnet-client",
                ClientVersion = "1.5.2"
            },
            ThreatInfo = new ThreatInfo()
            {
                ThreatTypes = new List<string> { "Malware" },
                PlatformTypes = new List<string> { "Windows" },
                ThreatEntryTypes = new List<string> { "URL" },
                ThreatEntries = new List<ThreatEntry>
                {
                    new ThreatEntry
                    {
                        Url = "google.com"
                    }
                }
            }
        });

        var response = await request.ExecuteAsync();

Надеюсь, это поможет всем, кто ищет быстрое решение. Не забудьте добавить свой ключ API

person Alex J    schedule 11.04.2018

Я нашел эту ветку, когда искал решение для интеграции моего приложения с Google SafeBrowsing. У меня это сработало, но я хотел бы добавить, что я также добавил строку

return (FindThreatMatchesResponse)response;

в конце кода, опубликованного выше, и заключил его в метод, называемый

protected async Task<FindThreatMatchesResponse> GoogleCheckAsync()

а затем мое событие нажатия кнопки добавило следующее:

FindThreatMatchesResponse x = await GoogleCheckAsync();
string threatTypes;
if (x.Matches != null)
{
    foreach (ThreatMatch match in x.Matches)
    {
         threatTypes += match.ThreatType + ";";
    }
}

Если вы хотите проверить наличие более подозрительных сайтов, вы также можете заменить соответствующую часть кода следующим образом:

ThreatTypes = new List<string> { "Malware", "Social_Engineering", "Unwanted_Software", "Potentially_Harmful_Application" },
PlatformTypes = new List<string> { "Any_Platform" },
person Zdenko Rupčić    schedule 10.08.2020