ничего не возвращается при запросе safebrowsing api

#go #httprequest #httpresponse #safe-browsing-api

#Вперед #httprequest #httpresponse #безопасный просмотр-api

Вопрос:

Я пытаюсь получить информацию из API Google, но тело ответа кажется пустым. он просто выводит {} на консоль. Не уверен, где я ошибся, поскольку я использовал документы для получения информации о полезной нагрузке для запроса: https://developers.google.com/safe-browsing/v4/lookup-api

 package main

import (
    "fmt"

    "encoding/json"
    "io/ioutil"
    "net/http"
    "strings"
)

type payload struct {
    Client     client     `json:"client"`
    ThreatInfo threatInfo `json:"threatInfo"`
}

type client struct {
    ClientId      string `json:"clientId"`
    ClientVersion string `json:"clientVersion"`
}

type threatInfo struct {
    ThreatTypes      []string `json:"threatTypes"`
    PlatformTypes    []string `json:"platformTypes"`
    ThreatEntryTypes []string `json:"threatEntryTypes"`
    ThreatEntries    []entry  `json:"threatEntries"`
}

type entry struct {
    URL string `json:"url"`
}

func checkURLs(urls []string) {

    // populate entries
    var entries = []entry{}
    for _, url := range urls {
        entries = append(entries, entry{URL: url})
    }

    data := payload {
        Client: client{
            ClientId:      "myapp",
            ClientVersion: "0.0.1",
        },
        ThreatInfo: threatInfo{
            ThreatTypes:   []string{"MALWARE", "SOCIAL_ENGINEERING", "POTENTIALLY_HARMFUL_APPLICATION"},
            PlatformTypes: []string{"ANY_PLATFORM"},
            ThreatEntryTypes: []string{"URL"},
            ThreatEntries: entries,
        },
    }

    jsonBytes, _ := json.Marshal(data)

    key := "*"
    api := fmt.Sprintf("https://safebrowsing.googleapis.com/v4/threatMatches:find?key=%s", key)
    req, _ := http.NewRequest("POST", api, strings.NewReader(string(jsonBytes)))
    req.Header.Add("Content-Type", "application/json")
    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    fmt.Println(res) // 200 OK 
    fmt.Println(err) // nil
    fmt.Println(string(body)) // {}
}

func main() {
    checkURLs([]string{"http://www.urltocheck1.org/", "http://www.urltocheck2.org/"})
}
 

Редактировать

Я нашел пакет go от Google, чтобы выполнить большую часть тяжелой работы, и все же, все еще пустой ответ. Я должен добавить, что мне удалось получить доступ к некоторым URL-адресам, которые содержат вредоносное ПО и обнаруживаются с помощью поиска по URL в отчете прозрачности Google: https://transparencyreport.google.com/safe-browsing/search

Итак, почему он пуст для меня, когда должны быть результаты?

 package main

import (
    "fmt"
    "github.com/google/safebrowsing"
)

func checkURLs(urls []string) {
    sb, err := safebrowsing.NewSafeBrowser(safebrowsing.Config{
        ID: "myapp",
        Version: "0.0.1",
        APIKey: "*",
    })

    if err != nil {
        fmt.Println(err)
        return
    }

    threats, err := sb.LookupURLs(urls)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(threats)
}

func main() {
    checkURLs([]string{"http://www.urltocheck1.org/", "http://www.urltocheck2.org/"})
}
 

Комментарии:

1. Вы игнорируете ошибки. Не делайте этого.

Ответ №1:

Я думаю, что это было указано в документах

Примечание: Если совпадений нет (то есть, если ни один из URL-адресов, указанных в запросе, не найден ни в одном из списков, указанных в запросе), ответ HTTP POST просто возвращает пустой объект в теле ответа.

Комментарии:

1. Спасибо, я не уверен, как я это пропустил, но мне удалось получить доступ к некоторым URL-адресам, которые содержат вредоносное ПО, и для меня они по-прежнему пусты. Хотя сами Google могут обнаружить это с помощью своего поиска… transparencyreport.google.com/safe-browsing/search