simpleRequest/headers.go

157 lines
4.5 KiB
Go
Raw Normal View History

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)(;|$))`)
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
}
// 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
}