...
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
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
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
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
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 }
64
View as plain text