forked from asmcos/requests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
requests_option.go
122 lines (105 loc) · 2.74 KB
/
requests_option.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package requests
import (
"context"
"crypto/tls"
"crypto/x509"
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
)
// set timeout s = second
func (session *Session) SetTimeout(n time.Duration) *Session {
session.Client.Timeout = n
return session
}
func (session *Session) SetContext(ctx context.Context) *Session {
// build request: session.httpreq = session.httpreq.WithContext(ctx)
session.initContext = ctx
return session
}
func (session *Session) Close() {
session.httpreq.Close = true
}
func (session *Session) SetProxy(proxyurl string) *Session {
urli := url.URL{}
urlproxy, err := urli.Parse(proxyurl)
if err != nil {
println("SetProxy, Bad proxy:" + proxyurl)
return session
}
transport := session.GetTransport()
transport.Proxy = http.ProxyURL(urlproxy)
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
return session
}
// In generally, you could SystemCertPool instead of NewCertPool to keep existing certs.
func (session *Session) SetRootCertificate(caPemPath string) *Session {
caCert, err := ioutil.ReadFile(caPemPath)
if err != nil {
panic(err)
}
tlsConf := session.getTLSClientConfig()
if tlsConf.RootCAs == nil{
tlsConf.RootCAs = x509.NewCertPool()
}
tlsConf.RootCAs.AppendCertsFromPEM(caCert)
return session
}
// SkipSsl
func (session *Session) SkipSsl(v bool) *Session {
tlsConf := session.getTLSClientConfig()
tlsConf.InsecureSkipVerify = v
return session
}
func (session *Session) getTLSClientConfig() *tls.Config {
tp := session.GetTransport()
tlsConf := tp.TLSClientConfig
if tlsConf == nil {
tlsConf = &tls.Config{}
}
return tlsConf
}
func (session *Session) GetTransport() *http.Transport {
transport := session.Client.Transport
if transport == nil {
transport = &http.Transport{
TLSClientConfig: &tls.Config{},
}
session.Client.Transport = transport
}
return transport.(*http.Transport)
}
func (session *Session) SetTransport(tsp *http.Transport) *Session {
session.Client.Transport = tsp
return session
}
func (session *Session) SetRespHandler(fn func(*Response) error) *Session {
session.respHandler = fn
return session
}
// SetMethod
func (session *Session) SetMethod(method string) *Session {
session.httpreq.Method = strings.ToUpper(method)
return session
}
// SetHeader
func (session *Session) SetHeader(key, value string) *Session {
session.httpreq.Header.Set(key, value)
return session
}
// Set global header
func (session *Session) SetGlobalHeader(key, value string) *Session {
session.gHeader[key] = value
return session
}
// Get global header
func (session *Session) GetGlobalHeader() map[string]string {
return session.gHeader
}
// Del global header
func (session *Session) DelGlobalHeader(key string) *Session {
delete(session.gHeader, key)
return session
}