2022-03-13 13:24:29 +00:00
|
|
|
|
package simpleRequest
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"math/rand"
|
|
|
|
|
"net/http"
|
|
|
|
|
"regexp"
|
|
|
|
|
"sync"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
hdrUserAgentKey = http.CanonicalHeaderKey("User-Agent")
|
|
|
|
|
hdrAcceptKey = http.CanonicalHeaderKey("Accept")
|
|
|
|
|
hdrContentTypeKey = http.CanonicalHeaderKey("Content-Type")
|
|
|
|
|
hdrContentLengthKey = http.CanonicalHeaderKey("Content-Length")
|
|
|
|
|
hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding")
|
|
|
|
|
hdrLocationKey = http.CanonicalHeaderKey("Location")
|
|
|
|
|
|
|
|
|
|
jsonContentType = "application/json"
|
|
|
|
|
formUrlencodedType = "application/x-www-form-urlencoded"
|
|
|
|
|
formDataType = "multipart/form-data"
|
|
|
|
|
xmlDataType = "application/xml"
|
|
|
|
|
textPlainType = "text/plain"
|
|
|
|
|
javaScriptType = "javascript"
|
|
|
|
|
|
2022-03-29 03:37:40 +00:00
|
|
|
|
charsetUtf8 = "charset=utf-8"
|
|
|
|
|
|
2022-03-13 13:24:29 +00:00
|
|
|
|
jsonCheck = regexp.MustCompile(`(?i:(application|text)/(json|.*\+json|json\-.*)(;|$))`)
|
|
|
|
|
xmlCheck = regexp.MustCompile(`(?i:(application|text)/(xml|.*\+xml)(;|$))`)
|
2022-12-09 18:06:12 +00:00
|
|
|
|
bufPool = &sync.Pool{New: func() any { return &bytes.Buffer{} }}
|
2022-03-13 13:24:29 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var userAgentList = [...]string{
|
|
|
|
|
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
|
|
|
|
|
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; 360SE)",
|
|
|
|
|
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type HeadersConf struct {
|
|
|
|
|
simpleReq *SimpleRequest
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
// Common key settings
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// batch settings
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) Sets(headers map[string]string) *HeadersConf {
|
|
|
|
|
for k, v := range headers {
|
|
|
|
|
s.simpleReq.headers.Set(k, v)
|
|
|
|
|
}
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// single setting
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) Set(header, value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(header, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *HeadersConf) Add(header, value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Add(header, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-29 01:52:45 +00:00
|
|
|
|
// Omit Use to disable automatically generated request headers ,some like Content_Type.
|
|
|
|
|
func (s *HeadersConf) Omit(keys ...string) *HeadersConf {
|
|
|
|
|
s.simpleReq.omitHeaderKeys = append(s.simpleReq.omitHeaderKeys, keys...)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-30 01:59:34 +00:00
|
|
|
|
//deprecated
|
2022-03-13 13:24:29 +00:00
|
|
|
|
//func (s *HeadersConf) Values(keys string) *HeadersConf {
|
|
|
|
|
// s.simpleReq.headers.Values(keys)
|
|
|
|
|
// return s
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
// SetHeaderMultiValues 支持多值传入,一般用不到
|
|
|
|
|
//func (s *HeadersConf) SetMultiValues(headers map[string][]string) *HeadersConf {
|
|
|
|
|
// for key, values := range headers {
|
|
|
|
|
// s.simpleReq.headers.Set(key, strings.Join(values, ", "))
|
|
|
|
|
// }
|
|
|
|
|
// return s
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
// base Key settings
|
2022-03-14 03:29:59 +00:00
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// SetUserAgent
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) SetUserAgent(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrUserAgentKey, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// SetConentType
|
2022-03-14 03:29:59 +00:00
|
|
|
|
func (s *HeadersConf) SetConentType(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentTypeKey, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
2022-03-13 13:24:29 +00:00
|
|
|
|
|
|
|
|
|
func (s *HeadersConf) ConentType_json() *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentTypeKey, jsonContentType)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-29 03:37:40 +00:00
|
|
|
|
func (s *HeadersConf) ConentType_charsetUtf8() *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Add(hdrContentTypeKey, charsetUtf8)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) ConentType_formData() *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentTypeKey, formDataType)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (s *HeadersConf) ConentType_formUrlencoded() *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentTypeKey, formUrlencodedType)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (s *HeadersConf) ConentType_textPlain() *HeadersConf {
|
2022-03-29 03:37:40 +00:00
|
|
|
|
s.simpleReq.headers.Set(hdrContentTypeKey, textPlainType)
|
2022-03-13 13:24:29 +00:00
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *HeadersConf) SetConentLength(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentLengthKey, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (s *HeadersConf) SetConentEncoding(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrContentEncodingKey, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (s *HeadersConf) SetConentLocation(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrLocationKey, value)
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// -------------------------------------------------------------
|
2022-03-13 13:24:29 +00:00
|
|
|
|
// Extended settings
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// 随机请求头的User-Agent参数
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) getRandomUerAgent() string {
|
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
|
index := rand.Intn(len(userAgentList))
|
|
|
|
|
return userAgentList[index]
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// 设置为随机 User-Agent
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) SetRandomUerAgent() *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set(hdrUserAgentKey, s.getRandomUerAgent())
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 14:35:27 +00:00
|
|
|
|
// set Authorization
|
2022-03-13 13:24:29 +00:00
|
|
|
|
func (s *HeadersConf) SetAuthorization(value string) *HeadersConf {
|
|
|
|
|
s.simpleReq.headers.Set("Authorization", value)
|
|
|
|
|
return s
|
|
|
|
|
}
|