|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- package requests
-
- import (
- "errors"
- "fmt"
- "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
- "io"
- "math/cmplx"
- "reflect"
- "strconv"
- "time"
- )
-
- const (
- RPC = "RPC"
- ROA = "ROA"
-
- HTTP = "HTTP"
- HTTPS = "HTTPS"
-
- JSON = "JSON"
- XML = "XML"
-
- DefaultHttpPort = "80"
-
- GET = "GET"
- PUT = "PUT"
- POST = "POST"
- DELETE = "DELETE"
- PATCH = "PATCH"
- HEAD = "HEAD"
- OPTIONS = "OPTIONS"
-
- Json = "application/json"
- Xml = "application/xml"
- Raw = "application/octet-stream"
- Form = "application/x-www-form-urlencoded"
-
- Header = "Header"
- Query = "Query"
- Body = "Body"
- Path = "Path"
-
- TEST = "TEST"
- PRE = "PRE"
- RELEASE = "RELEASE"
-
- HeaderSeparator = "\n"
- )
-
- type Host struct {
- Default string
- Func func(string) string
- }
-
- var debug utils.Debug
-
- func init() {
- debug = utils.Init("request")
- }
-
- type AcsRequest interface {
- GetReadTimeout() time.Duration
- GetConnectTimeout() time.Duration
- SetReadTimeout(readTimeOut time.Duration)
- SetConnectTimeout(connectTimeOut time.Duration)
- SetHTTPSInsecure(isInsecure bool)
- GetHTTPSInsecure() *bool
- GetQueryParams() map[string]string
- GetFormParams() map[string]string
- GetMethod() string
- GetScheme() string
- GetDomain() Host
- SetDomain(host Host)
- GetActionName() string
- GetAcceptFormat() string
- GetAccept() string
- GetHeaders() map[string]string
- GetStyle() string
- InitWithApiInfo(domain Host, version, urlPath string)
- GetEnv() string
- SetEnv(string)
-
- BuildUrl() string
- BuildQueries() string
-
- SetScheme(scheme string)
- SetContent(content []byte)
-
- SetStringToSign(stringToSign string)
- GetStringToSign() string
- GetBodyReader() io.Reader
-
- AddHeaderParam(key, value string)
- addQueryParam(key, value string)
- addFormParam(key, value string)
- }
-
- type baseRequest struct {
- Scheme string
- Method string
- Port string
- Domain Host
- From string
- ReadTimeout time.Duration
- ConnectTimeout time.Duration
- isInsecure *bool
- Env string
-
- AcceptFormat string
- actionName string
-
- userAgent map[string]string
- product string
- version string
-
- QueryParams map[string]string
- Headers map[string]string
- FormParams map[string]string
- Content []byte
-
- queries string
- stringToSign string
- }
-
- func (request *baseRequest) GetEnv() string {
- return request.Env
- }
-
- func (request *baseRequest) SetEnv(e string) {
- request.Env = e
- }
-
- func (request *baseRequest) GetStringToSign() string {
- return request.stringToSign
- }
-
- func (request *baseRequest) SetContent(content []byte) {
- request.Content = content
- }
-
- func (request *baseRequest) GetAcceptFormat() string {
- return request.AcceptFormat
- }
-
- func (request *baseRequest) GetAccept() string {
- switch request.GetAcceptFormat() {
- case JSON:
- return Json
- case XML:
- return Xml
- }
- return ""
- }
-
- func (request *baseRequest) GetHeaders() map[string]string {
- return request.Headers
- }
-
- func (request *baseRequest) GetActionName() string {
- return request.actionName
- }
-
- func (request *baseRequest) SetScheme(scheme string) {
- request.Scheme = scheme
- }
-
- func (request *baseRequest) SetDomain(host Host) {
- request.Domain = host
- }
-
- func (request *baseRequest) GetScheme() string {
- return request.Scheme
- }
-
- func (request *baseRequest) GetDomain() Host {
- return request.Domain
- }
-
- func (request *baseRequest) GetMethod() string {
- return request.Method
- }
-
- func (request *baseRequest) GetFormParams() map[string]string {
- return request.FormParams
- }
-
- func (request *baseRequest) GetQueryParams() map[string]string {
- return request.QueryParams
- }
-
- func (request *baseRequest) SetHTTPSInsecure(isInsecure bool) {
- request.isInsecure = &isInsecure
- }
-
- func (request *baseRequest) GetHTTPSInsecure() *bool {
- return request.isInsecure
- }
-
- func (request *baseRequest) GetReadTimeout() time.Duration {
- return request.ReadTimeout
- }
-
- func (request *baseRequest) GetConnectTimeout() time.Duration {
- return request.ConnectTimeout
- }
-
- func (request *baseRequest) SetReadTimeout(readTimeOut time.Duration) {
- request.ReadTimeout = readTimeOut
- }
-
- func (request *baseRequest) SetConnectTimeout(connectTimeOut time.Duration) {
- request.ConnectTimeout = connectTimeOut
- }
-
- func (request *baseRequest) SetStringToSign(stringToSign string) {
- request.stringToSign = stringToSign
- }
-
- func (request *baseRequest) AddHeaderParam(key, val string) {
- request.Headers[key] = val
- }
-
- func (request *baseRequest) addQueryParam(key, val string) {
- request.QueryParams[key] = val
- }
-
- func (request *baseRequest) addFormParam(key, val string) {
- request.FormParams[key] = val
- }
-
- func defaultBaseRequest() (request *baseRequest) {
- request = &baseRequest{
- Scheme: HTTP,
- AcceptFormat: JSON,
- Method: GET,
- QueryParams: make(map[string]string),
- Headers: map[string]string{
- "Gr-Sdk-Client": "golang/1.14",
- "Gr-Sdk-Invoke-Type": "normal",
- "Accept-Encoding": Json,
- },
- FormParams: make(map[string]string),
- }
- return
- }
-
- func InitParam(request AcsRequest) (err error) {
- reflectValue := reflect.ValueOf(request).Elem()
- err = flatRepeatedList(reflectValue, request, "")
- return nil
- }
-
- func flatRepeatedList(reflectValue reflect.Value, request AcsRequest, position string) (err error) {
- reflectType := reflectValue.Type()
- for i := 0; i < reflectType.NumField(); i++ {
- field := reflectType.Field(i)
- name, isContiansNameTag := field.Tag.Lookup("field")
-
- fieldPosition := position
- if fieldPosition == "" {
- fieldPosition, _ = field.Tag.Lookup("position")
- }
-
- fieldDefault, _ := field.Tag.Lookup("default")
- debug("%s %s %s", name, fieldPosition, fieldDefault)
- if isContiansNameTag {
- var value string
- switch field.Type.Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- value = strconv.FormatInt(reflectValue.Field(i).Int(), 10)
- case reflect.Uintptr, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- value = strconv.FormatUint(reflectValue.Field(i).Uint(), 10)
- case reflect.Float32, reflect.Float64:
- value = strconv.FormatFloat(reflectValue.Field(i).Float(), 'E', -1, 64)
- case reflect.Bool:
- value = strconv.FormatBool(reflectValue.Field(i).Bool())
- case reflect.Complex64, reflect.Complex128:
- value = fmt.Sprint(cmplx.Sqrt(reflectValue.Field(i).Complex()))
- default:
- value = reflectValue.Field(i).String()
- }
-
- if len(value) == 0 {
- value = fieldDefault
- }
-
- if value == "0" && fieldDefault != "" && fieldDefault != "0" {
- value = fieldDefault
- }
-
- err = addParam(request, fieldPosition, name, value)
- }
- }
-
- return
- }
-
- func addParam(request AcsRequest, position, key, value string) (err error) {
- if len(value) > 0 {
- switch position {
- case Header:
- request.AddHeaderParam(key, value)
- case Query:
- request.addQueryParam(key, value)
- case Body:
- request.addFormParam(key, value)
- default:
- errmsg := fmt.Sprintf("unsupport positions add param `%s`", position)
- err = errors.New(errmsg)
- }
- }
- return
- }
|