| |
| package utils |
|
|
| import ( |
| "bytes" |
| "github.com/Tencent/AI-Infra-Guard/pkg/httpx" |
| "net/url" |
| "strings" |
|
|
| "github.com/PuerkitoBio/goquery" |
| ) |
|
|
| |
| |
| func GetFaviconBytes(hp *httpx.HTTPX, domain string, resp []byte) ([]byte, error) { |
| |
| doc, err := goquery.NewDocumentFromReader(bytes.NewReader(resp)) |
| if err != nil { |
| return nil, err |
| } |
|
|
| |
| faviconUrl, err := url.JoinPath(domain, "/favicon.ico") |
| if err != nil { |
| return nil, err |
| } |
|
|
| |
| var urlList []string = []string{} |
|
|
| |
| |
| doc.Find("link").Each(func(i int, s *goquery.Selection) { |
| rel, ok := s.Attr("rel") |
| if ok && strings.Contains(strings.ToLower(rel), "icon") { |
| href, ok := s.Attr("href") |
| if ok { |
| |
| href, err = url.JoinPath(domain, href) |
| if err == nil { |
| urlList = append(urlList, href) |
| } |
| } |
| } |
| }) |
|
|
| |
| urlList = append(urlList, faviconUrl) |
|
|
| |
| for _, u := range urlList { |
| httpResp, err := hp.Get(u, nil) |
| if err != nil { |
| continue |
| } |
| return httpResp.Data, nil |
| } |
|
|
| return nil, nil |
| } |
|
|