common_request.go 1.7 KB

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