Skip to content

Commit 9a15275

Browse files
committed
feat(site): add user agent middleware for HTTP requests
- Implement httpTransport struct in besticon.go to add user agent headers - Create RandomUserAgent function in useragent.go to generate random user agents - Update getWebLogoIconBase64 function to use the new httpTransport
1 parent 059edd5 commit 9a15275

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

internal/service/site/service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ func (s *service) i() {}
6565
func getWebLogoIconBase64(url string) (string, error) {
6666
client := &http.Client{
6767
Timeout: 3 * time.Second,
68-
Transport: &http.Transport{
68+
Transport: tools.NewHTTPTransport(&http.Transport{
6969
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
70-
},
70+
}),
7171
}
7272

7373
b := besticon.New(

pkg/tools/besticon.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @Author: chentong
3+
* @Date: 2025/02/08 14:31
4+
*/
5+
6+
package tools
7+
8+
import (
9+
"net/http"
10+
)
11+
12+
var _ http.RoundTripper = (*httpTransport)(nil)
13+
14+
type httpTransport struct {
15+
transport http.RoundTripper
16+
17+
userAgent string
18+
}
19+
20+
func (h *httpTransport) RoundTrip(req *http.Request) (*http.Response, error) {
21+
req.Header.Set("Accept", "*/*")
22+
req.Header.Set("User-Agent", h.userAgent)
23+
return h.transport.RoundTrip(req)
24+
}
25+
26+
func NewHTTPTransport(transport *http.Transport) http.RoundTripper {
27+
return &httpTransport{
28+
transport: transport,
29+
userAgent: RandomUserAgent(),
30+
}
31+
}

pkg/tools/useragent.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* @Author: chentong
3+
* @Date: 2025/02/08 14:43
4+
*/
5+
6+
package tools
7+
8+
import (
9+
"fmt"
10+
"math/rand"
11+
)
12+
13+
var uaGens = []func() string{
14+
genFirefoxUA,
15+
genChromeUA,
16+
}
17+
18+
// RandomUserAgent generates a random browser user agent on every request
19+
func RandomUserAgent() string {
20+
return uaGens[rand.Intn(len(uaGens))]()
21+
}
22+
23+
var ffVersions = []float32{
24+
58.0,
25+
57.0,
26+
56.0,
27+
52.0,
28+
48.0,
29+
40.0,
30+
35.0,
31+
}
32+
33+
var chromeVersions = []string{
34+
"65.0.3325.146",
35+
"64.0.3282.0",
36+
"41.0.2228.0",
37+
"40.0.2214.93",
38+
"37.0.2062.124",
39+
}
40+
41+
var osStrings = []string{
42+
"Macintosh; Intel Mac OS X 10_10",
43+
"Windows NT 10.0",
44+
"Windows NT 5.1",
45+
"Windows NT 6.1; WOW64",
46+
"Windows NT 6.1; Win64; x64",
47+
"X11; Linux x86_64",
48+
}
49+
50+
func genFirefoxUA() string {
51+
version := ffVersions[rand.Intn(len(ffVersions))]
52+
os := osStrings[rand.Intn(len(osStrings))]
53+
return fmt.Sprintf("Mozilla/5.0 (%s; rv:%.1f) Gecko/20100101 Firefox/%.1f", os, version, version)
54+
}
55+
56+
func genChromeUA() string {
57+
version := chromeVersions[rand.Intn(len(chromeVersions))]
58+
os := osStrings[rand.Intn(len(osStrings))]
59+
return fmt.Sprintf("Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36", os, version)
60+
}

0 commit comments

Comments
 (0)