#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