Skip to content

Commit 77eac63

Browse files
committed
feat: RequestSetting增加设置代理、跳过tls证书校验功能
1 parent 3b2d689 commit 77eac63

File tree

3 files changed

+75
-19
lines changed

3 files changed

+75
-19
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# HTTP请求工具
2-
1+
# HTTP请求工具
32

43
```bash
54
go get -u github.com/crawler-go-go-go/go-requests
65
```
76

8-
# TODO
9-
- [x] 方便的做响应格式处理
10-
- [ ] 兼容HTTP2
7+
# TODO
8+
9+
- [x] 方便的做响应格式处理
10+
- [ ] 兼容HTTP2
1111
- [ ] 兼容JA3指纹
1212

http.go

+2-14
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,7 @@ import (
1010
// DefaultMaxTryTimes 默认情况下的最大重试次数
1111
const DefaultMaxTryTimes = 3
1212

13-
type RequestSetting func(client *http.Client, request *http.Request) error
14-
15-
const DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
16-
17-
func DefaultUserAgentRequestSetting() RequestSetting {
18-
return func(client *http.Client, httpRequest *http.Request) error {
19-
httpRequest.Header.Set("User-Agent", DefaultUserAgent)
20-
return nil
21-
}
22-
}
23-
24-
// ------------------------------------------------- --------------------------------------------------------------------
25-
13+
// SendRequest 底层API,不建议直接调用
2614
func SendRequest[Request any, Response any](ctx context.Context, options *Options[Request, Response]) (Response, error) {
2715

2816
// TODO set default params
@@ -32,7 +20,7 @@ func SendRequest[Request any, Response any](ctx context.Context, options *Option
3220
for tryTimes := 0; tryTimes < options.MaxTryTimes; tryTimes++ {
3321
var client http.Client
3422

35-
// 忽略证书验证
23+
// 忽略证书验证
3624
client.Transport = &http.Transport{
3725
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
3826
}

request_setting.go

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package requests
2+
3+
import (
4+
"net/http"
5+
"net/url"
6+
)
7+
8+
type RequestSetting func(client *http.Client, request *http.Request) error
9+
10+
const DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
11+
12+
// DefaultRequestSetting 每个请求默认添加的设置
13+
func DefaultRequestSetting() RequestSetting {
14+
return func(client *http.Client, httpRequest *http.Request) error {
15+
settings := []RequestSetting{
16+
RequestSettingUserAgent(),
17+
RequestSettingSkipTlsVerify(),
18+
}
19+
for _, setting := range settings {
20+
err := setting(client, httpRequest)
21+
if err != nil {
22+
return err
23+
}
24+
}
25+
return nil
26+
}
27+
}
28+
29+
// RequestSettingUserAgent 设置User-Agent,如果不传递的则使用默认的User-Agent
30+
func RequestSettingUserAgent(userAgent ...string) RequestSetting {
31+
if len(userAgent) == 0 {
32+
userAgent = append(userAgent, DefaultUserAgent)
33+
}
34+
return func(client *http.Client, httpRequest *http.Request) error {
35+
httpRequest.Header.Set("User-Agent", userAgent[0])
36+
return nil
37+
}
38+
}
39+
40+
// RequestSettingProxy 配置代理IP
41+
func RequestSettingProxy(proxy string) RequestSetting {
42+
parse, err := url.Parse(proxy)
43+
return func(client *http.Client, httpRequest *http.Request) error {
44+
if err != nil {
45+
return err
46+
}
47+
transport, ok := client.Transport.(*http.Transport)
48+
if !ok {
49+
transport = &http.Transport{}
50+
}
51+
transport.Proxy = http.ProxyURL(parse)
52+
client.Transport = transport
53+
return nil
54+
}
55+
}
56+
57+
// RequestSettingSkipTlsVerify 跳过https证书验证
58+
func RequestSettingSkipTlsVerify() RequestSetting {
59+
return func(client *http.Client, httpRequest *http.Request) error {
60+
transport, ok := client.Transport.(*http.Transport)
61+
if !ok {
62+
transport = &http.Transport{}
63+
}
64+
transport.TLSClientConfig.InsecureSkipVerify = true
65+
client.Transport = transport
66+
return nil
67+
}
68+
}

0 commit comments

Comments
 (0)