github.com/aliyun/credentials-go@v1.4.7/credentials/request/common_request.go (about) 1 package request 2 3 import ( 4 "fmt" 5 "net/url" 6 "strings" 7 "time" 8 9 "github.com/aliyun/credentials-go/credentials/utils" 10 ) 11 12 // CommonRequest is for requesting credential 13 type CommonRequest struct { 14 Scheme string 15 Method string 16 Domain string 17 RegionId string 18 URL string 19 ReadTimeout time.Duration 20 ConnectTimeout time.Duration 21 isInsecure *bool 22 BodyParams map[string]string 23 userAgent map[string]string 24 QueryParams map[string]string 25 Headers map[string]string 26 27 queries string 28 } 29 30 // NewCommonRequest returns a CommonRequest 31 func NewCommonRequest() *CommonRequest { 32 return &CommonRequest{ 33 BodyParams: make(map[string]string), 34 QueryParams: make(map[string]string), 35 Headers: make(map[string]string), 36 } 37 } 38 39 // BuildURL returns a url 40 func (request *CommonRequest) BuildURL() string { 41 url := fmt.Sprintf("%s://%s", strings.ToLower(request.Scheme), request.Domain) 42 request.queries = "/?" + utils.GetURLFormedMap(request.QueryParams) 43 return url + request.queries 44 } 45 46 // BuildStringToSign returns BuildStringToSign 47 func (request *CommonRequest) BuildStringToSign() (stringToSign string) { 48 signParams := make(map[string]string) 49 for key, value := range request.QueryParams { 50 signParams[key] = value 51 } 52 53 for key, value := range request.BodyParams { 54 signParams[key] = value 55 } 56 stringToSign = utils.GetURLFormedMap(signParams) 57 stringToSign = strings.Replace(stringToSign, "+", "%20", -1) 58 stringToSign = strings.Replace(stringToSign, "*", "%2A", -1) 59 stringToSign = strings.Replace(stringToSign, "%7E", "~", -1) 60 stringToSign = url.QueryEscape(stringToSign) 61 stringToSign = request.Method + "&%2F&" + stringToSign 62 return 63 }