common_request.go raw

   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  }
  64