From 84c58c3756126d7981910eb83291bea244f29ccc Mon Sep 17 00:00:00 2001 From: yuxh Date: Thu, 5 Feb 2026 23:10:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(requests):=20=E6=B7=BB=E5=8A=A0=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=A4=B4=E6=89=B9=E9=87=8F=E8=AE=BE=E7=BD=AE=E5=92=8C?= =?UTF-8?q?=E8=BF=BD=E8=B8=AAID=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 AddHeaders 方法支持批量添加请求头参数 - 新增 RefererHeader 结构体用于管理 Referer 和 TraceId - 添加随机字符串生成工具包 random - 集成 MD5 加密和追踪 ID 生成功能 - 修改 IP 服务域名从 ip.gaore.com 到 ip.gaore.com.hk - 在客户端请求中自动添加 Referer 和 Traceparent 头信息 --- sdk/client.go | 23 +++++++++++- sdk/requests/request.go | 12 ++++++ sdk/utils/random/str_random.go | 69 ++++++++++++++++++++++++++++++++++ sdk/utils/utils.go | 17 ++++++--- services/ip/client.go | 2 +- 5 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 sdk/utils/random/str_random.go diff --git a/sdk/client.go b/sdk/client.go index 47bde20..48d55cc 100644 --- a/sdk/client.go +++ b/sdk/client.go @@ -44,6 +44,27 @@ type Client struct { httpProxy string httpsProxy string noProxy string + + header *requests.RefererHeader +} + +func (client *Client) SetRefererHeader(header *requests.RefererHeader) { + client.header = header +} + +func (client *Client) getRefererHeader() map[string]string { + var header *requests.RefererHeader + if client.header == nil { + header = &requests.RefererHeader{ + TraceId: utils.MakeTraceId(), + } + } else { + header = client.header + } + return map[string]string{ + "Referer": header.Referer, + "Traceparent": header.TraceId, + } } func (client *Client) GetNoProxy() string { @@ -216,7 +237,7 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A } func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) { - + request.AddHeaders(client.getRefererHeader()) httpRequest, err := client.buildRequestWithSigner(request, signer) if err != nil { return err diff --git a/sdk/requests/request.go b/sdk/requests/request.go index e6fc33f..740921b 100644 --- a/sdk/requests/request.go +++ b/sdk/requests/request.go @@ -55,6 +55,11 @@ type Host struct { Func func(string, string) string } +type RefererHeader struct { + Referer string + TraceId string +} + var debug utils.Debug func init() { @@ -96,6 +101,7 @@ type AcsRequest interface { GetBodyReader() io.Reader AddHeaderParam(key, value string) + AddHeaders(headers map[string]string) addQueryParam(key, value string) addFormParam(key, value string) addJsonParam(string, interface{}) @@ -236,6 +242,12 @@ func (request *baseRequest) AddHeaderParam(key, val string) { request.Headers[key] = val } +func (request *baseRequest) AddHeaders(headers map[string]string) { + for key, val := range headers { + request.Headers[key] = val + } +} + func (request *baseRequest) addQueryParam(key, val string) { request.QueryParams[key] = val } diff --git a/sdk/utils/random/str_random.go b/sdk/utils/random/str_random.go new file mode 100644 index 0000000..e5c3be6 --- /dev/null +++ b/sdk/utils/random/str_random.go @@ -0,0 +1,69 @@ +package random + +import ( + "math/rand" + "time" + "unsafe" +) + +type Mode int // 随机数模式 + +const ( + Letter Mode = iota + Number + LetterNumber + LetterHex +) + +const ( + letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + numbers = "0123456789" + lettersHex = "0123456789abcdef" + letterIdBit = 6 + letterIdxMask = 1<= 0; { + if remain == 0 { + cache, remain = src.Int63(), letterIdxMax + } + if idx := int(cache & letterIdxMask); idx < len(baseStr) { + b[i] = baseStr[idx] + i-- + } + cache >>= letterIdBit + remain-- + } + return *(*string)(unsafe.Pointer(&b)) +} diff --git a/sdk/utils/utils.go b/sdk/utils/utils.go index c655962..60288fa 100644 --- a/sdk/utils/utils.go +++ b/sdk/utils/utils.go @@ -5,8 +5,8 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/utils/random" "hash" - rand2 "math/rand" "net/url" "reflect" "sort" @@ -36,11 +36,7 @@ func NewUUID() UUID { } func RandStringBytes(n int) string { - b := make([]byte, n) - for i := range b { - b[i] = letterBytes[rand2.Intn(len(letterBytes))] - } - return string(b) + return random.StrRandom(int64(n)) } func newFromHash(h hash.Hash, ns UUID, name string) UUID { @@ -109,3 +105,12 @@ func InitStructWithDefaultTag(bean interface{}) { } } } + +func Md5(data string) string { + s := md5.Sum([]byte(data)) + return hex.EncodeToString(s[:]) +} + +func MakeTraceId() string { + return fmt.Sprintf("00-%s-%s-01", random.Random(32, random.LetterHex), random.Random(16, random.LetterHex)) +} diff --git a/services/ip/client.go b/services/ip/client.go index ca90cec..8506c2d 100644 --- a/services/ip/client.go +++ b/services/ip/client.go @@ -11,7 +11,7 @@ const ( ) var HOST = requests.Host{ - Default: "ip.gaore.com", + Default: "ip.gaore.com.hk", Func: func(s string, area string) string { if area != "" { fmt.Println("ip.gaore.com." + area)