1
2
5 package client
6
7 import (
8 "io"
9
10 spi "github.com/alibabacloud-go/alibabacloud-gateway-spi/client"
11 openapiutil "github.com/alibabacloud-go/openapi-util/service"
12 util "github.com/alibabacloud-go/tea-utils/service"
13 xml "github.com/alibabacloud-go/tea-xml/service"
14 "github.com/alibabacloud-go/tea/tea"
15 credential "github.com/aliyun/credentials-go/credentials"
16 )
17
18 type GlobalParameters struct {
19 Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
20 Queries map[string]*string `json:"queries,omitempty" xml:"queries,omitempty"`
21 }
22
23 func (s GlobalParameters) String() string {
24 return tea.Prettify(s)
25 }
26
27 func (s GlobalParameters) GoString() string {
28 return s.String()
29 }
30
31 func (s *GlobalParameters) SetHeaders(v map[string]*string) *GlobalParameters {
32 s.Headers = v
33 return s
34 }
35
36 func (s *GlobalParameters) SetQueries(v map[string]*string) *GlobalParameters {
37 s.Queries = v
38 return s
39 }
40
41
44 type Config struct {
45
46 AccessKeyId *string `json:"accessKeyId,omitempty" xml:"accessKeyId,omitempty"`
47
48 AccessKeySecret *string `json:"accessKeySecret,omitempty" xml:"accessKeySecret,omitempty"`
49
50 SecurityToken *string `json:"securityToken,omitempty" xml:"securityToken,omitempty"`
51
52 Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty"`
53
54 Method *string `json:"method,omitempty" xml:"method,omitempty"`
55
56 RegionId *string `json:"regionId,omitempty" xml:"regionId,omitempty"`
57
58 ReadTimeout *int `json:"readTimeout,omitempty" xml:"readTimeout,omitempty"`
59
60 ConnectTimeout *int `json:"connectTimeout,omitempty" xml:"connectTimeout,omitempty"`
61
62 HttpProxy *string `json:"httpProxy,omitempty" xml:"httpProxy,omitempty"`
63
64 HttpsProxy *string `json:"httpsProxy,omitempty" xml:"httpsProxy,omitempty"`
65
66 Credential credential.Credential `json:"credential,omitempty" xml:"credential,omitempty"`
67
68 Endpoint *string `json:"endpoint,omitempty" xml:"endpoint,omitempty"`
69
70 NoProxy *string `json:"noProxy,omitempty" xml:"noProxy,omitempty"`
71
72 MaxIdleConns *int `json:"maxIdleConns,omitempty" xml:"maxIdleConns,omitempty"`
73
74 Network *string `json:"network,omitempty" xml:"network,omitempty"`
75
76 UserAgent *string `json:"userAgent,omitempty" xml:"userAgent,omitempty"`
77
78 Suffix *string `json:"suffix,omitempty" xml:"suffix,omitempty"`
79
80 Socks5Proxy *string `json:"socks5Proxy,omitempty" xml:"socks5Proxy,omitempty"`
81
82 Socks5NetWork *string `json:"socks5NetWork,omitempty" xml:"socks5NetWork,omitempty"`
83
84 EndpointType *string `json:"endpointType,omitempty" xml:"endpointType,omitempty"`
85
86 OpenPlatformEndpoint *string `json:"openPlatformEndpoint,omitempty" xml:"openPlatformEndpoint,omitempty"`
87
88
89 Type *string `json:"type,omitempty" xml:"type,omitempty"`
90
91 SignatureVersion *string `json:"signatureVersion,omitempty" xml:"signatureVersion,omitempty"`
92
93 SignatureAlgorithm *string `json:"signatureAlgorithm,omitempty" xml:"signatureAlgorithm,omitempty"`
94
95 GlobalParameters *GlobalParameters `json:"globalParameters,omitempty" xml:"globalParameters,omitempty"`
96 }
97
98 func (s Config) String() string {
99 return tea.Prettify(s)
100 }
101
102 func (s Config) GoString() string {
103 return s.String()
104 }
105
106 func (s *Config) SetAccessKeyId(v string) *Config {
107 s.AccessKeyId = &v
108 return s
109 }
110
111 func (s *Config) SetAccessKeySecret(v string) *Config {
112 s.AccessKeySecret = &v
113 return s
114 }
115
116 func (s *Config) SetSecurityToken(v string) *Config {
117 s.SecurityToken = &v
118 return s
119 }
120
121 func (s *Config) SetProtocol(v string) *Config {
122 s.Protocol = &v
123 return s
124 }
125
126 func (s *Config) SetMethod(v string) *Config {
127 s.Method = &v
128 return s
129 }
130
131 func (s *Config) SetRegionId(v string) *Config {
132 s.RegionId = &v
133 return s
134 }
135
136 func (s *Config) SetReadTimeout(v int) *Config {
137 s.ReadTimeout = &v
138 return s
139 }
140
141 func (s *Config) SetConnectTimeout(v int) *Config {
142 s.ConnectTimeout = &v
143 return s
144 }
145
146 func (s *Config) SetHttpProxy(v string) *Config {
147 s.HttpProxy = &v
148 return s
149 }
150
151 func (s *Config) SetHttpsProxy(v string) *Config {
152 s.HttpsProxy = &v
153 return s
154 }
155
156 func (s *Config) SetCredential(v credential.Credential) *Config {
157 s.Credential = v
158 return s
159 }
160
161 func (s *Config) SetEndpoint(v string) *Config {
162 s.Endpoint = &v
163 return s
164 }
165
166 func (s *Config) SetNoProxy(v string) *Config {
167 s.NoProxy = &v
168 return s
169 }
170
171 func (s *Config) SetMaxIdleConns(v int) *Config {
172 s.MaxIdleConns = &v
173 return s
174 }
175
176 func (s *Config) SetNetwork(v string) *Config {
177 s.Network = &v
178 return s
179 }
180
181 func (s *Config) SetUserAgent(v string) *Config {
182 s.UserAgent = &v
183 return s
184 }
185
186 func (s *Config) SetSuffix(v string) *Config {
187 s.Suffix = &v
188 return s
189 }
190
191 func (s *Config) SetSocks5Proxy(v string) *Config {
192 s.Socks5Proxy = &v
193 return s
194 }
195
196 func (s *Config) SetSocks5NetWork(v string) *Config {
197 s.Socks5NetWork = &v
198 return s
199 }
200
201 func (s *Config) SetEndpointType(v string) *Config {
202 s.EndpointType = &v
203 return s
204 }
205
206 func (s *Config) SetOpenPlatformEndpoint(v string) *Config {
207 s.OpenPlatformEndpoint = &v
208 return s
209 }
210
211 func (s *Config) SetType(v string) *Config {
212 s.Type = &v
213 return s
214 }
215
216 func (s *Config) SetSignatureVersion(v string) *Config {
217 s.SignatureVersion = &v
218 return s
219 }
220
221 func (s *Config) SetSignatureAlgorithm(v string) *Config {
222 s.SignatureAlgorithm = &v
223 return s
224 }
225
226 func (s *Config) SetGlobalParameters(v *GlobalParameters) *Config {
227 s.GlobalParameters = v
228 return s
229 }
230
231 type OpenApiRequest struct {
232 Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
233 Query map[string]*string `json:"query,omitempty" xml:"query,omitempty"`
234 Body interface{} `json:"body,omitempty" xml:"body,omitempty"`
235 Stream io.Reader `json:"stream,omitempty" xml:"stream,omitempty"`
236 HostMap map[string]*string `json:"hostMap,omitempty" xml:"hostMap,omitempty"`
237 EndpointOverride *string `json:"endpointOverride,omitempty" xml:"endpointOverride,omitempty"`
238 }
239
240 func (s OpenApiRequest) String() string {
241 return tea.Prettify(s)
242 }
243
244 func (s OpenApiRequest) GoString() string {
245 return s.String()
246 }
247
248 func (s *OpenApiRequest) SetHeaders(v map[string]*string) *OpenApiRequest {
249 s.Headers = v
250 return s
251 }
252
253 func (s *OpenApiRequest) SetQuery(v map[string]*string) *OpenApiRequest {
254 s.Query = v
255 return s
256 }
257
258 func (s *OpenApiRequest) SetBody(v interface{}) *OpenApiRequest {
259 s.Body = v
260 return s
261 }
262
263 func (s *OpenApiRequest) SetStream(v io.Reader) *OpenApiRequest {
264 s.Stream = v
265 return s
266 }
267
268 func (s *OpenApiRequest) SetHostMap(v map[string]*string) *OpenApiRequest {
269 s.HostMap = v
270 return s
271 }
272
273 func (s *OpenApiRequest) SetEndpointOverride(v string) *OpenApiRequest {
274 s.EndpointOverride = &v
275 return s
276 }
277
278 type Params struct {
279 Action *string `json:"action,omitempty" xml:"action,omitempty" require:"true"`
280 Version *string `json:"version,omitempty" xml:"version,omitempty" require:"true"`
281 Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty" require:"true"`
282 Pathname *string `json:"pathname,omitempty" xml:"pathname,omitempty" require:"true"`
283 Method *string `json:"method,omitempty" xml:"method,omitempty" require:"true"`
284 AuthType *string `json:"authType,omitempty" xml:"authType,omitempty" require:"true"`
285 BodyType *string `json:"bodyType,omitempty" xml:"bodyType,omitempty" require:"true"`
286 ReqBodyType *string `json:"reqBodyType,omitempty" xml:"reqBodyType,omitempty" require:"true"`
287 Style *string `json:"style,omitempty" xml:"style,omitempty"`
288 }
289
290 func (s Params) String() string {
291 return tea.Prettify(s)
292 }
293
294 func (s Params) GoString() string {
295 return s.String()
296 }
297
298 func (s *Params) SetAction(v string) *Params {
299 s.Action = &v
300 return s
301 }
302
303 func (s *Params) SetVersion(v string) *Params {
304 s.Version = &v
305 return s
306 }
307
308 func (s *Params) SetProtocol(v string) *Params {
309 s.Protocol = &v
310 return s
311 }
312
313 func (s *Params) SetPathname(v string) *Params {
314 s.Pathname = &v
315 return s
316 }
317
318 func (s *Params) SetMethod(v string) *Params {
319 s.Method = &v
320 return s
321 }
322
323 func (s *Params) SetAuthType(v string) *Params {
324 s.AuthType = &v
325 return s
326 }
327
328 func (s *Params) SetBodyType(v string) *Params {
329 s.BodyType = &v
330 return s
331 }
332
333 func (s *Params) SetReqBodyType(v string) *Params {
334 s.ReqBodyType = &v
335 return s
336 }
337
338 func (s *Params) SetStyle(v string) *Params {
339 s.Style = &v
340 return s
341 }
342
343 type Client struct {
344 Endpoint *string
345 RegionId *string
346 Protocol *string
347 Method *string
348 UserAgent *string
349 EndpointRule *string
350 EndpointMap map[string]*string
351 Suffix *string
352 ReadTimeout *int
353 ConnectTimeout *int
354 HttpProxy *string
355 HttpsProxy *string
356 Socks5Proxy *string
357 Socks5NetWork *string
358 NoProxy *string
359 Network *string
360 ProductId *string
361 MaxIdleConns *int
362 EndpointType *string
363 OpenPlatformEndpoint *string
364 Credential credential.Credential
365 SignatureVersion *string
366 SignatureAlgorithm *string
367 Headers map[string]*string
368 Spi spi.ClientInterface
369 GlobalParameters *GlobalParameters
370 }
371
372
376 func NewClient(config *Config) (*Client, error) {
377 client := new(Client)
378 err := client.Init(config)
379 return client, err
380 }
381
382 func (client *Client) Init(config *Config) (_err error) {
383 if tea.BoolValue(util.IsUnset(tea.ToMap(config))) {
384 _err = tea.NewSDKError(map[string]interface{}{
385 "code": "ParameterMissing",
386 "message": "'config' can not be unset",
387 })
388 return _err
389 }
390
391 if !tea.BoolValue(util.Empty(config.AccessKeyId)) && !tea.BoolValue(util.Empty(config.AccessKeySecret)) {
392 if !tea.BoolValue(util.Empty(config.SecurityToken)) {
393 config.Type = tea.String("sts")
394 } else {
395 config.Type = tea.String("access_key")
396 }
397
398 credentialConfig := &credential.Config{
399 AccessKeyId: config.AccessKeyId,
400 Type: config.Type,
401 AccessKeySecret: config.AccessKeySecret,
402 SecurityToken: config.SecurityToken,
403 }
404 client.Credential, _err = credential.NewCredential(credentialConfig)
405 if _err != nil {
406 return _err
407 }
408
409 } else if !tea.BoolValue(util.IsUnset(config.Credential)) {
410 client.Credential = config.Credential
411 }
412
413 client.Endpoint = config.Endpoint
414 client.EndpointType = config.EndpointType
415 client.Network = config.Network
416 client.Suffix = config.Suffix
417 client.Protocol = config.Protocol
418 client.Method = config.Method
419 client.RegionId = config.RegionId
420 client.UserAgent = config.UserAgent
421 client.ReadTimeout = config.ReadTimeout
422 client.ConnectTimeout = config.ConnectTimeout
423 client.HttpProxy = config.HttpProxy
424 client.HttpsProxy = config.HttpsProxy
425 client.NoProxy = config.NoProxy
426 client.Socks5Proxy = config.Socks5Proxy
427 client.Socks5NetWork = config.Socks5NetWork
428 client.MaxIdleConns = config.MaxIdleConns
429 client.SignatureVersion = config.SignatureVersion
430 client.SignatureAlgorithm = config.SignatureAlgorithm
431 client.GlobalParameters = config.GlobalParameters
432 return nil
433 }
434
435
447 func (client *Client) DoRPCRequest(action *string, version *string, protocol *string, method *string, authType *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
448 _err = tea.Validate(request)
449 if _err != nil {
450 return _result, _err
451 }
452 _err = tea.Validate(runtime)
453 if _err != nil {
454 return _result, _err
455 }
456 _runtime := map[string]interface{}{
457 "timeouted": "retry",
458 "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
459 "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
460 "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
461 "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
462 "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
463 "socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
464 "socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
465 "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
466 "retry": map[string]interface{}{
467 "retryable": tea.BoolValue(runtime.Autoretry),
468 "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
469 },
470 "backoff": map[string]interface{}{
471 "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
472 "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
473 },
474 "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
475 }
476
477 _resp := make(map[string]interface{})
478 for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
479 if _retryTimes > 0 {
480 _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
481 if tea.IntValue(_backoffTime) > 0 {
482 tea.Sleep(_backoffTime)
483 }
484 }
485
486 _resp, _err = func() (map[string]interface{}, error) {
487 request_ := tea.NewRequest()
488 request_.Protocol = util.DefaultString(client.Protocol, protocol)
489 request_.Method = method
490 request_.Pathname = tea.String("/")
491 request_.Query = tea.Merge(map[string]*string{
492 "Action": action,
493 "Format": tea.String("json"),
494 "Version": version,
495 "Timestamp": openapiutil.GetTimestamp(),
496 "SignatureNonce": util.GetNonce(),
497 }, request.Query)
498 headers, _err := client.GetRpcHeaders()
499 if _err != nil {
500 return _result, _err
501 }
502
503 if tea.BoolValue(util.IsUnset(headers)) {
504
505 request_.Headers = map[string]*string{
506 "host": client.Endpoint,
507 "x-acs-version": version,
508 "x-acs-action": action,
509 "user-agent": client.GetUserAgent(),
510 }
511 } else {
512 request_.Headers = tea.Merge(map[string]*string{
513 "host": client.Endpoint,
514 "x-acs-version": version,
515 "x-acs-action": action,
516 "user-agent": client.GetUserAgent(),
517 }, headers)
518 }
519
520 if !tea.BoolValue(util.IsUnset(request.Body)) {
521 m := util.AssertAsMap(request.Body)
522 tmp := util.AnyifyMapValue(openapiutil.Query(m))
523 request_.Body = tea.ToReader(util.ToFormString(tmp))
524 request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
525 }
526
527 if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
528 accessKeyId, _err := client.GetAccessKeyId()
529 if _err != nil {
530 return _result, _err
531 }
532
533 accessKeySecret, _err := client.GetAccessKeySecret()
534 if _err != nil {
535 return _result, _err
536 }
537
538 securityToken, _err := client.GetSecurityToken()
539 if _err != nil {
540 return _result, _err
541 }
542
543 if !tea.BoolValue(util.Empty(securityToken)) {
544 request_.Query["SecurityToken"] = securityToken
545 }
546
547 request_.Query["SignatureMethod"] = tea.String("HMAC-SHA1")
548 request_.Query["SignatureVersion"] = tea.String("1.0")
549 request_.Query["AccessKeyId"] = accessKeyId
550 var t map[string]interface{}
551 if !tea.BoolValue(util.IsUnset(request.Body)) {
552 t = util.AssertAsMap(request.Body)
553 }
554
555 signedParam := tea.Merge(request_.Query,
556 openapiutil.Query(t))
557 request_.Query["Signature"] = openapiutil.GetRPCSignature(signedParam, request_.Method, accessKeySecret)
558 }
559
560 response_, _err := tea.DoRequest(request_, _runtime)
561 if _err != nil {
562 return _result, _err
563 }
564 if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
565 _res, _err := util.ReadAsJSON(response_.Body)
566 if _err != nil {
567 return _result, _err
568 }
569
570 err := util.AssertAsMap(_res)
571 requestId := DefaultAny(err["RequestId"], err["requestId"])
572 _err = tea.NewSDKError(map[string]interface{}{
573 "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
574 "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
575 "data": err,
576 })
577 return _result, _err
578 }
579
580 if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
581 resp := map[string]interface{}{
582 "body": response_.Body,
583 "headers": response_.Headers,
584 }
585 _result = resp
586 return _result, _err
587 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
588 byt, _err := util.ReadAsBytes(response_.Body)
589 if _err != nil {
590 return _result, _err
591 }
592
593 _result = make(map[string]interface{})
594 _err = tea.Convert(map[string]interface{}{
595 "body": byt,
596 "headers": response_.Headers,
597 }, &_result)
598 return _result, _err
599 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
600 str, _err := util.ReadAsString(response_.Body)
601 if _err != nil {
602 return _result, _err
603 }
604
605 _result = make(map[string]interface{})
606 _err = tea.Convert(map[string]interface{}{
607 "body": tea.StringValue(str),
608 "headers": response_.Headers,
609 }, &_result)
610 return _result, _err
611 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
612 obj, _err := util.ReadAsJSON(response_.Body)
613 if _err != nil {
614 return _result, _err
615 }
616
617 res := util.AssertAsMap(obj)
618 _result = make(map[string]interface{})
619 _err = tea.Convert(map[string]interface{}{
620 "body": res,
621 "headers": response_.Headers,
622 }, &_result)
623 return _result, _err
624 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
625 arr, _err := util.ReadAsJSON(response_.Body)
626 if _err != nil {
627 return _result, _err
628 }
629
630 _result = make(map[string]interface{})
631 _err = tea.Convert(map[string]interface{}{
632 "body": arr,
633 "headers": response_.Headers,
634 }, &_result)
635 return _result, _err
636 } else {
637 _result = make(map[string]interface{})
638 _err = tea.Convert(map[string]map[string]*string{
639 "headers": response_.Headers,
640 }, &_result)
641 return _result, _err
642 }
643
644 }()
645 if !tea.BoolValue(tea.Retryable(_err)) {
646 break
647 }
648 }
649
650 return _resp, _err
651 }
652
653
666 func (client *Client) DoROARequest(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
667 _err = tea.Validate(request)
668 if _err != nil {
669 return _result, _err
670 }
671 _err = tea.Validate(runtime)
672 if _err != nil {
673 return _result, _err
674 }
675 _runtime := map[string]interface{}{
676 "timeouted": "retry",
677 "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
678 "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
679 "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
680 "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
681 "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
682 "socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
683 "socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
684 "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
685 "retry": map[string]interface{}{
686 "retryable": tea.BoolValue(runtime.Autoretry),
687 "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
688 },
689 "backoff": map[string]interface{}{
690 "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
691 "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
692 },
693 "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
694 }
695
696 _resp := make(map[string]interface{})
697 for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
698 if _retryTimes > 0 {
699 _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
700 if tea.IntValue(_backoffTime) > 0 {
701 tea.Sleep(_backoffTime)
702 }
703 }
704
705 _resp, _err = func() (map[string]interface{}, error) {
706 request_ := tea.NewRequest()
707 request_.Protocol = util.DefaultString(client.Protocol, protocol)
708 request_.Method = method
709 request_.Pathname = pathname
710 request_.Headers = tea.Merge(map[string]*string{
711 "date": util.GetDateUTCString(),
712 "host": client.Endpoint,
713 "accept": tea.String("application/json"),
714 "x-acs-signature-nonce": util.GetNonce(),
715 "x-acs-signature-method": tea.String("HMAC-SHA1"),
716 "x-acs-signature-version": tea.String("1.0"),
717 "x-acs-version": version,
718 "x-acs-action": action,
719 "user-agent": util.GetUserAgent(client.UserAgent),
720 }, request.Headers)
721 if !tea.BoolValue(util.IsUnset(request.Body)) {
722 request_.Body = tea.ToReader(util.ToJSONString(request.Body))
723 request_.Headers["content-type"] = tea.String("application/json; charset=utf-8")
724 }
725
726 if !tea.BoolValue(util.IsUnset(request.Query)) {
727 request_.Query = request.Query
728 }
729
730 if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
731 accessKeyId, _err := client.GetAccessKeyId()
732 if _err != nil {
733 return _result, _err
734 }
735
736 accessKeySecret, _err := client.GetAccessKeySecret()
737 if _err != nil {
738 return _result, _err
739 }
740
741 securityToken, _err := client.GetSecurityToken()
742 if _err != nil {
743 return _result, _err
744 }
745
746 if !tea.BoolValue(util.Empty(securityToken)) {
747 request_.Headers["x-acs-accesskey-id"] = accessKeyId
748 request_.Headers["x-acs-security-token"] = securityToken
749 }
750
751 stringToSign := openapiutil.GetStringToSign(request_)
752 request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
753 }
754
755 response_, _err := tea.DoRequest(request_, _runtime)
756 if _err != nil {
757 return _result, _err
758 }
759 if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
760 _result = make(map[string]interface{})
761 _err = tea.Convert(map[string]map[string]*string{
762 "headers": response_.Headers,
763 }, &_result)
764 return _result, _err
765 }
766
767 if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
768 _res, _err := util.ReadAsJSON(response_.Body)
769 if _err != nil {
770 return _result, _err
771 }
772
773 err := util.AssertAsMap(_res)
774 requestId := DefaultAny(err["RequestId"], err["requestId"])
775 requestId = DefaultAny(requestId, err["requestid"])
776 _err = tea.NewSDKError(map[string]interface{}{
777 "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
778 "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
779 "data": err,
780 })
781 return _result, _err
782 }
783
784 if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
785 resp := map[string]interface{}{
786 "body": response_.Body,
787 "headers": response_.Headers,
788 }
789 _result = resp
790 return _result, _err
791 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
792 byt, _err := util.ReadAsBytes(response_.Body)
793 if _err != nil {
794 return _result, _err
795 }
796
797 _result = make(map[string]interface{})
798 _err = tea.Convert(map[string]interface{}{
799 "body": byt,
800 "headers": response_.Headers,
801 }, &_result)
802 return _result, _err
803 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
804 str, _err := util.ReadAsString(response_.Body)
805 if _err != nil {
806 return _result, _err
807 }
808
809 _result = make(map[string]interface{})
810 _err = tea.Convert(map[string]interface{}{
811 "body": tea.StringValue(str),
812 "headers": response_.Headers,
813 }, &_result)
814 return _result, _err
815 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
816 obj, _err := util.ReadAsJSON(response_.Body)
817 if _err != nil {
818 return _result, _err
819 }
820
821 res := util.AssertAsMap(obj)
822 _result = make(map[string]interface{})
823 _err = tea.Convert(map[string]interface{}{
824 "body": res,
825 "headers": response_.Headers,
826 }, &_result)
827 return _result, _err
828 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
829 arr, _err := util.ReadAsJSON(response_.Body)
830 if _err != nil {
831 return _result, _err
832 }
833
834 _result = make(map[string]interface{})
835 _err = tea.Convert(map[string]interface{}{
836 "body": arr,
837 "headers": response_.Headers,
838 }, &_result)
839 return _result, _err
840 } else {
841 _result = make(map[string]interface{})
842 _err = tea.Convert(map[string]map[string]*string{
843 "headers": response_.Headers,
844 }, &_result)
845 return _result, _err
846 }
847
848 }()
849 if !tea.BoolValue(tea.Retryable(_err)) {
850 break
851 }
852 }
853
854 return _resp, _err
855 }
856
857
870 func (client *Client) DoROARequestWithForm(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
871 _err = tea.Validate(request)
872 if _err != nil {
873 return _result, _err
874 }
875 _err = tea.Validate(runtime)
876 if _err != nil {
877 return _result, _err
878 }
879 _runtime := map[string]interface{}{
880 "timeouted": "retry",
881 "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
882 "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
883 "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
884 "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
885 "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
886 "socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
887 "socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
888 "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
889 "retry": map[string]interface{}{
890 "retryable": tea.BoolValue(runtime.Autoretry),
891 "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
892 },
893 "backoff": map[string]interface{}{
894 "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
895 "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
896 },
897 "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
898 }
899
900 _resp := make(map[string]interface{})
901 for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
902 if _retryTimes > 0 {
903 _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
904 if tea.IntValue(_backoffTime) > 0 {
905 tea.Sleep(_backoffTime)
906 }
907 }
908
909 _resp, _err = func() (map[string]interface{}, error) {
910 request_ := tea.NewRequest()
911 request_.Protocol = util.DefaultString(client.Protocol, protocol)
912 request_.Method = method
913 request_.Pathname = pathname
914 request_.Headers = tea.Merge(map[string]*string{
915 "date": util.GetDateUTCString(),
916 "host": client.Endpoint,
917 "accept": tea.String("application/json"),
918 "x-acs-signature-nonce": util.GetNonce(),
919 "x-acs-signature-method": tea.String("HMAC-SHA1"),
920 "x-acs-signature-version": tea.String("1.0"),
921 "x-acs-version": version,
922 "x-acs-action": action,
923 "user-agent": util.GetUserAgent(client.UserAgent),
924 }, request.Headers)
925 if !tea.BoolValue(util.IsUnset(request.Body)) {
926 m := util.AssertAsMap(request.Body)
927 request_.Body = tea.ToReader(openapiutil.ToForm(m))
928 request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
929 }
930
931 if !tea.BoolValue(util.IsUnset(request.Query)) {
932 request_.Query = request.Query
933 }
934
935 if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
936 accessKeyId, _err := client.GetAccessKeyId()
937 if _err != nil {
938 return _result, _err
939 }
940
941 accessKeySecret, _err := client.GetAccessKeySecret()
942 if _err != nil {
943 return _result, _err
944 }
945
946 securityToken, _err := client.GetSecurityToken()
947 if _err != nil {
948 return _result, _err
949 }
950
951 if !tea.BoolValue(util.Empty(securityToken)) {
952 request_.Headers["x-acs-accesskey-id"] = accessKeyId
953 request_.Headers["x-acs-security-token"] = securityToken
954 }
955
956 stringToSign := openapiutil.GetStringToSign(request_)
957 request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
958 }
959
960 response_, _err := tea.DoRequest(request_, _runtime)
961 if _err != nil {
962 return _result, _err
963 }
964 if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
965 _result = make(map[string]interface{})
966 _err = tea.Convert(map[string]map[string]*string{
967 "headers": response_.Headers,
968 }, &_result)
969 return _result, _err
970 }
971
972 if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
973 _res, _err := util.ReadAsJSON(response_.Body)
974 if _err != nil {
975 return _result, _err
976 }
977
978 err := util.AssertAsMap(_res)
979 _err = tea.NewSDKError(map[string]interface{}{
980 "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
981 "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
982 "data": err,
983 })
984 return _result, _err
985 }
986
987 if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
988 resp := map[string]interface{}{
989 "body": response_.Body,
990 "headers": response_.Headers,
991 }
992 _result = resp
993 return _result, _err
994 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
995 byt, _err := util.ReadAsBytes(response_.Body)
996 if _err != nil {
997 return _result, _err
998 }
999
1000 _result = make(map[string]interface{})
1001 _err = tea.Convert(map[string]interface{}{
1002 "body": byt,
1003 "headers": response_.Headers,
1004 }, &_result)
1005 return _result, _err
1006 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
1007 str, _err := util.ReadAsString(response_.Body)
1008 if _err != nil {
1009 return _result, _err
1010 }
1011
1012 _result = make(map[string]interface{})
1013 _err = tea.Convert(map[string]interface{}{
1014 "body": tea.StringValue(str),
1015 "headers": response_.Headers,
1016 }, &_result)
1017 return _result, _err
1018 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
1019 obj, _err := util.ReadAsJSON(response_.Body)
1020 if _err != nil {
1021 return _result, _err
1022 }
1023
1024 res := util.AssertAsMap(obj)
1025 _result = make(map[string]interface{})
1026 _err = tea.Convert(map[string]interface{}{
1027 "body": res,
1028 "headers": response_.Headers,
1029 }, &_result)
1030 return _result, _err
1031 } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
1032 arr, _err := util.ReadAsJSON(response_.Body)
1033 if _err != nil {
1034 return _result, _err
1035 }
1036
1037 _result = make(map[string]interface{})
1038 _err = tea.Convert(map[string]interface{}{
1039 "body": arr,
1040 "headers": response_.Headers,
1041 }, &_result)
1042 return _result, _err
1043 } else {
1044 _result = make(map[string]interface{})
1045 _err = tea.Convert(map[string]map[string]*string{
1046 "headers": response_.Headers,
1047 }, &_result)
1048 return _result, _err
1049 }
1050
1051 }()
1052 if !tea.BoolValue(tea.Retryable(_err)) {
1053 break
1054 }
1055 }
1056
1057 return _resp, _err
1058 }
1059
1060
1072 func (client *Client) DoRequest(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
1073 _err = tea.Validate(params)
1074 if _err != nil {
1075 return _result, _err
1076 }
1077 _err = tea.Validate(request)
1078 if _err != nil {
1079 return _result, _err
1080 }
1081 _err = tea.Validate(runtime)
1082 if _err != nil {
1083 return _result, _err
1084 }
1085 _runtime := map[string]interface{}{
1086 "timeouted": "retry",
1087 "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
1088 "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
1089 "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
1090 "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
1091 "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
1092 "socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
1093 "socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
1094 "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
1095 "retry": map[string]interface{}{
1096 "retryable": tea.BoolValue(runtime.Autoretry),
1097 "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
1098 },
1099 "backoff": map[string]interface{}{
1100 "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
1101 "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
1102 },
1103 "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
1104 }
1105
1106 _resp := make(map[string]interface{})
1107 for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
1108 if _retryTimes > 0 {
1109 _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
1110 if tea.IntValue(_backoffTime) > 0 {
1111 tea.Sleep(_backoffTime)
1112 }
1113 }
1114
1115 _resp, _err = func() (map[string]interface{}, error) {
1116 request_ := tea.NewRequest()
1117 request_.Protocol = util.DefaultString(client.Protocol, params.Protocol)
1118 request_.Method = params.Method
1119 request_.Pathname = params.Pathname
1120 globalQueries := make(map[string]*string)
1121 globalHeaders := make(map[string]*string)
1122 if !tea.BoolValue(util.IsUnset(tea.ToMap(client.GlobalParameters))) {
1123 globalParams := client.GlobalParameters
1124 if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
1125 globalQueries = globalParams.Queries
1126 }
1127
1128 if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
1129 globalHeaders = globalParams.Headers
1130 }
1131
1132 }
1133
1134 request_.Query = tea.Merge(globalQueries,
1135 request.Query)
1136
1137 request_.Headers = tea.Merge(map[string]*string{
1138 "host": client.Endpoint,
1139 "x-acs-version": params.Version,
1140 "x-acs-action": params.Action,
1141 "user-agent": client.GetUserAgent(),
1142 "x-acs-date": openapiutil.GetTimestamp(),
1143 "x-acs-signature-nonce": util.GetNonce(),
1144 "accept": tea.String("application/json"),
1145 }, globalHeaders,
1146 request.Headers)
1147 if tea.BoolValue(util.EqualString(params.Style, tea.String("RPC"))) {
1148 headers, _err := client.GetRpcHeaders()
1149 if _err != nil {
1150 return _result, _err
1151 }
1152
1153 if !tea.BoolValue(util.IsUnset(headers)) {
1154 request_.Headers = tea.Merge(request_.Headers,
1155 headers)
1156 }
1157
1158 }
1159
1160 signatureAlgorithm := util.DefaultString(client.SignatureAlgorithm, tea.String("ACS3-HMAC-SHA256"))
1161 hashedRequestPayload := openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(tea.String("")), signatureAlgorithm))
1162 if !tea.BoolValue(util.IsUnset(request.Stream)) {
1163 tmp, _err := util.ReadAsBytes(request.Stream)
1164 if _err != nil {
1165 return _result, _err
1166 }
1167
1168 hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(tmp, signatureAlgorithm))
1169 request_.Body = tea.ToReader(tmp)
1170 request_.Headers["content-type"] = tea.String("application/octet-stream")
1171 } else {
1172 if !tea.BoolValue(util.IsUnset(request.Body)) {
1173 if tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
1174 jsonObj := util.ToJSONString(request.Body)
1175 hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(jsonObj), signatureAlgorithm))
1176 request_.Body = tea.ToReader(jsonObj)
1177 request_.Headers["content-type"] = tea.String("application/json; charset=utf-8")
1178 } else {
1179 m := util.AssertAsMap(request.Body)
1180 formObj := openapiutil.ToForm(m)
1181 hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(formObj), signatureAlgorithm))
1182 request_.Body = tea.ToReader(formObj)
1183 request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
1184 }
1185
1186 }
1187
1188 }
1189
1190 request_.Headers["x-acs-content-sha256"] = hashedRequestPayload
1191 if !tea.BoolValue(util.EqualString(params.AuthType, tea.String("Anonymous"))) {
1192 authType, _err := client.GetType()
1193 if _err != nil {
1194 return _result, _err
1195 }
1196
1197 if tea.BoolValue(util.EqualString(authType, tea.String("bearer"))) {
1198 bearerToken, _err := client.GetBearerToken()
1199 if _err != nil {
1200 return _result, _err
1201 }
1202
1203 request_.Headers["x-acs-bearer-token"] = bearerToken
1204 } else {
1205 accessKeyId, _err := client.GetAccessKeyId()
1206 if _err != nil {
1207 return _result, _err
1208 }
1209
1210 accessKeySecret, _err := client.GetAccessKeySecret()
1211 if _err != nil {
1212 return _result, _err
1213 }
1214
1215 securityToken, _err := client.GetSecurityToken()
1216 if _err != nil {
1217 return _result, _err
1218 }
1219
1220 if !tea.BoolValue(util.Empty(securityToken)) {
1221 request_.Headers["x-acs-accesskey-id"] = accessKeyId
1222 request_.Headers["x-acs-security-token"] = securityToken
1223 }
1224
1225 request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret)
1226 }
1227
1228 }
1229
1230 response_, _err := tea.DoRequest(request_, _runtime)
1231 if _err != nil {
1232 return _result, _err
1233 }
1234 if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
1235 err := map[string]interface{}{}
1236 if !tea.BoolValue(util.IsUnset(response_.Headers["content-type"])) && tea.BoolValue(util.EqualString(response_.Headers["content-type"], tea.String("text/xml;charset=utf-8"))) {
1237 _str, _err := util.ReadAsString(response_.Body)
1238 if _err != nil {
1239 return _result, _err
1240 }
1241
1242 respMap := xml.ParseXml(_str, nil)
1243 err = util.AssertAsMap(respMap["Error"])
1244 } else {
1245 _res, _err := util.ReadAsJSON(response_.Body)
1246 if _err != nil {
1247 return _result, _err
1248 }
1249
1250 err = util.AssertAsMap(_res)
1251 }
1252
1253 err["statusCode"] = response_.StatusCode
1254 _err = tea.NewSDKError(map[string]interface{}{
1255 "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
1256 "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
1257 "data": err,
1258 })
1259 return _result, _err
1260 }
1261
1262 if tea.BoolValue(util.EqualString(params.BodyType, tea.String("binary"))) {
1263 resp := map[string]interface{}{
1264 "body": response_.Body,
1265 "headers": response_.Headers,
1266 "statusCode": tea.IntValue(response_.StatusCode),
1267 }
1268 _result = resp
1269 return _result, _err
1270 } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("byte"))) {
1271 byt, _err := util.ReadAsBytes(response_.Body)
1272 if _err != nil {
1273 return _result, _err
1274 }
1275
1276 _result = make(map[string]interface{})
1277 _err = tea.Convert(map[string]interface{}{
1278 "body": byt,
1279 "headers": response_.Headers,
1280 "statusCode": tea.IntValue(response_.StatusCode),
1281 }, &_result)
1282 return _result, _err
1283 } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("string"))) {
1284 str, _err := util.ReadAsString(response_.Body)
1285 if _err != nil {
1286 return _result, _err
1287 }
1288
1289 _result = make(map[string]interface{})
1290 _err = tea.Convert(map[string]interface{}{
1291 "body": tea.StringValue(str),
1292 "headers": response_.Headers,
1293 "statusCode": tea.IntValue(response_.StatusCode),
1294 }, &_result)
1295 return _result, _err
1296 } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("json"))) {
1297 obj, _err := util.ReadAsJSON(response_.Body)
1298 if _err != nil {
1299 return _result, _err
1300 }
1301
1302 res := util.AssertAsMap(obj)
1303 _result = make(map[string]interface{})
1304 _err = tea.Convert(map[string]interface{}{
1305 "body": res,
1306 "headers": response_.Headers,
1307 "statusCode": tea.IntValue(response_.StatusCode),
1308 }, &_result)
1309 return _result, _err
1310 } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("array"))) {
1311 arr, _err := util.ReadAsJSON(response_.Body)
1312 if _err != nil {
1313 return _result, _err
1314 }
1315
1316 _result = make(map[string]interface{})
1317 _err = tea.Convert(map[string]interface{}{
1318 "body": arr,
1319 "headers": response_.Headers,
1320 "statusCode": tea.IntValue(response_.StatusCode),
1321 }, &_result)
1322 return _result, _err
1323 } else {
1324 _result = make(map[string]interface{})
1325 _err = tea.Convert(map[string]interface{}{
1326 "headers": response_.Headers,
1327 "statusCode": tea.IntValue(response_.StatusCode),
1328 }, &_result)
1329 return _result, _err
1330 }
1331
1332 }()
1333 if !tea.BoolValue(tea.Retryable(_err)) {
1334 break
1335 }
1336 }
1337
1338 return _resp, _err
1339 }
1340
1341
1353 func (client *Client) Execute(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
1354 _err = tea.Validate(params)
1355 if _err != nil {
1356 return _result, _err
1357 }
1358 _err = tea.Validate(request)
1359 if _err != nil {
1360 return _result, _err
1361 }
1362 _err = tea.Validate(runtime)
1363 if _err != nil {
1364 return _result, _err
1365 }
1366 _runtime := map[string]interface{}{
1367 "timeouted": "retry",
1368 "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
1369 "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
1370 "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
1371 "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
1372 "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
1373 "socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
1374 "socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
1375 "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
1376 "retry": map[string]interface{}{
1377 "retryable": tea.BoolValue(runtime.Autoretry),
1378 "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
1379 },
1380 "backoff": map[string]interface{}{
1381 "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
1382 "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
1383 },
1384 "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
1385 }
1386
1387 _resp := make(map[string]interface{})
1388 for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
1389 if _retryTimes > 0 {
1390 _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
1391 if tea.IntValue(_backoffTime) > 0 {
1392 tea.Sleep(_backoffTime)
1393 }
1394 }
1395
1396 _resp, _err = func() (map[string]interface{}, error) {
1397 request_ := tea.NewRequest()
1398
1399 headers, _err := client.GetRpcHeaders()
1400 if _err != nil {
1401 return _result, _err
1402 }
1403
1404 globalQueries := make(map[string]*string)
1405 globalHeaders := make(map[string]*string)
1406 if !tea.BoolValue(util.IsUnset(tea.ToMap(client.GlobalParameters))) {
1407 globalParams := client.GlobalParameters
1408 if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
1409 globalQueries = globalParams.Queries
1410 }
1411
1412 if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
1413 globalHeaders = globalParams.Headers
1414 }
1415
1416 }
1417
1418 requestContext := &spi.InterceptorContextRequest{
1419 Headers: tea.Merge(globalHeaders,
1420 request.Headers,
1421 headers),
1422 Query: tea.Merge(globalQueries,
1423 request.Query),
1424 Body: request.Body,
1425 Stream: request.Stream,
1426 HostMap: request.HostMap,
1427 Pathname: params.Pathname,
1428 ProductId: client.ProductId,
1429 Action: params.Action,
1430 Version: params.Version,
1431 Protocol: util.DefaultString(client.Protocol, params.Protocol),
1432 Method: util.DefaultString(client.Method, params.Method),
1433 AuthType: params.AuthType,
1434 BodyType: params.BodyType,
1435 ReqBodyType: params.ReqBodyType,
1436 Style: params.Style,
1437 Credential: client.Credential,
1438 SignatureVersion: client.SignatureVersion,
1439 SignatureAlgorithm: client.SignatureAlgorithm,
1440 UserAgent: client.GetUserAgent(),
1441 }
1442 configurationContext := &spi.InterceptorContextConfiguration{
1443 RegionId: client.RegionId,
1444 Endpoint: util.DefaultString(request.EndpointOverride, client.Endpoint),
1445 EndpointRule: client.EndpointRule,
1446 EndpointMap: client.EndpointMap,
1447 EndpointType: client.EndpointType,
1448 Network: client.Network,
1449 Suffix: client.Suffix,
1450 }
1451 interceptorContext := &spi.InterceptorContext{
1452 Request: requestContext,
1453 Configuration: configurationContext,
1454 }
1455 attributeMap := &spi.AttributeMap{}
1456
1457 _err = client.Spi.ModifyConfiguration(interceptorContext, attributeMap)
1458 if _err != nil {
1459 return _result, _err
1460 }
1461
1462 _err = client.Spi.ModifyRequest(interceptorContext, attributeMap)
1463 if _err != nil {
1464 return _result, _err
1465 }
1466 request_.Protocol = interceptorContext.Request.Protocol
1467 request_.Method = interceptorContext.Request.Method
1468 request_.Pathname = interceptorContext.Request.Pathname
1469 request_.Query = interceptorContext.Request.Query
1470 request_.Body = interceptorContext.Request.Stream
1471 request_.Headers = interceptorContext.Request.Headers
1472 response_, _err := tea.DoRequest(request_, _runtime)
1473 if _err != nil {
1474 return _result, _err
1475 }
1476 responseContext := &spi.InterceptorContextResponse{
1477 StatusCode: response_.StatusCode,
1478 Headers: response_.Headers,
1479 Body: response_.Body,
1480 }
1481 interceptorContext.Response = responseContext
1482
1483 _err = client.Spi.ModifyResponse(interceptorContext, attributeMap)
1484 if _err != nil {
1485 return _result, _err
1486 }
1487 _result = make(map[string]interface{})
1488 _err = tea.Convert(map[string]interface{}{
1489 "headers": interceptorContext.Response.Headers,
1490 "statusCode": tea.IntValue(interceptorContext.Response.StatusCode),
1491 "body": interceptorContext.Response.DeserializedBody,
1492 }, &_result)
1493 return _result, _err
1494 }()
1495 if !tea.BoolValue(tea.Retryable(_err)) {
1496 break
1497 }
1498 }
1499
1500 return _resp, _err
1501 }
1502
1503 func (client *Client) CallApi(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
1504 if tea.BoolValue(util.IsUnset(tea.ToMap(params))) {
1505 _err = tea.NewSDKError(map[string]interface{}{
1506 "code": "ParameterMissing",
1507 "message": "'params' can not be unset",
1508 })
1509 return _result, _err
1510 }
1511
1512 if tea.BoolValue(util.IsUnset(client.SignatureAlgorithm)) || !tea.BoolValue(util.EqualString(client.SignatureAlgorithm, tea.String("v2"))) {
1513 _result = make(map[string]interface{})
1514 _body, _err := client.DoRequest(params, request, runtime)
1515 if _err != nil {
1516 return _result, _err
1517 }
1518 _result = _body
1519 return _result, _err
1520 } else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) && tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
1521 _result = make(map[string]interface{})
1522 _body, _err := client.DoROARequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1523 if _err != nil {
1524 return _result, _err
1525 }
1526 _result = _body
1527 return _result, _err
1528 } else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) {
1529 _result = make(map[string]interface{})
1530 _body, _err := client.DoROARequestWithForm(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1531 if _err != nil {
1532 return _result, _err
1533 }
1534 _result = _body
1535 return _result, _err
1536 } else {
1537 _result = make(map[string]interface{})
1538 _body, _err := client.DoRPCRequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.BodyType, request, runtime)
1539 if _err != nil {
1540 return _result, _err
1541 }
1542 _result = _body
1543 return _result, _err
1544 }
1545
1546 }
1547
1548
1552 func (client *Client) GetUserAgent() (_result *string) {
1553 userAgent := util.GetUserAgent(client.UserAgent)
1554 _result = userAgent
1555 return _result
1556 }
1557
1558
1562 func (client *Client) GetAccessKeyId() (_result *string, _err error) {
1563 if tea.BoolValue(util.IsUnset(client.Credential)) {
1564 _result = tea.String("")
1565 return _result, _err
1566 }
1567
1568 accessKeyId, _err := client.Credential.GetAccessKeyId()
1569 if _err != nil {
1570 return _result, _err
1571 }
1572
1573 _result = accessKeyId
1574 return _result, _err
1575 }
1576
1577
1581 func (client *Client) GetAccessKeySecret() (_result *string, _err error) {
1582 if tea.BoolValue(util.IsUnset(client.Credential)) {
1583 _result = tea.String("")
1584 return _result, _err
1585 }
1586
1587 secret, _err := client.Credential.GetAccessKeySecret()
1588 if _err != nil {
1589 return _result, _err
1590 }
1591
1592 _result = secret
1593 return _result, _err
1594 }
1595
1596
1600 func (client *Client) GetSecurityToken() (_result *string, _err error) {
1601 if tea.BoolValue(util.IsUnset(client.Credential)) {
1602 _result = tea.String("")
1603 return _result, _err
1604 }
1605
1606 token, _err := client.Credential.GetSecurityToken()
1607 if _err != nil {
1608 return _result, _err
1609 }
1610
1611 _result = token
1612 return _result, _err
1613 }
1614
1615
1619 func (client *Client) GetBearerToken() (_result *string, _err error) {
1620 if tea.BoolValue(util.IsUnset(client.Credential)) {
1621 _result = tea.String("")
1622 return _result, _err
1623 }
1624
1625 token := client.Credential.GetBearerToken()
1626 _result = token
1627 return _result, _err
1628 }
1629
1630
1634 func (client *Client) GetType() (_result *string, _err error) {
1635 if tea.BoolValue(util.IsUnset(client.Credential)) {
1636 _result = tea.String("")
1637 return _result, _err
1638 }
1639
1640 authType := client.Credential.GetType()
1641 _result = authType
1642 return _result, _err
1643 }
1644
1645
1651 func DefaultAny(inputValue interface{}, defaultValue interface{}) (_result interface{}) {
1652 if tea.BoolValue(util.IsUnset(inputValue)) {
1653 _result = defaultValue
1654 return _result
1655 }
1656
1657 _result = inputValue
1658 return _result
1659 }
1660
1661
1665 func (client *Client) CheckConfig(config *Config) (_err error) {
1666 if tea.BoolValue(util.Empty(client.EndpointRule)) && tea.BoolValue(util.Empty(config.Endpoint)) {
1667 _err = tea.NewSDKError(map[string]interface{}{
1668 "code": "ParameterMissing",
1669 "message": "'config.endpoint' can not be empty",
1670 })
1671 return _err
1672 }
1673
1674 return _err
1675 }
1676
1677
1681 func (client *Client) SetRpcHeaders(headers map[string]*string) (_err error) {
1682 client.Headers = headers
1683 return _err
1684 }
1685
1686
1689 func (client *Client) GetRpcHeaders() (_result map[string]*string, _err error) {
1690 headers := client.Headers
1691 client.Headers = nil
1692 _result = headers
1693 return _result, _err
1694 }
1695
View as plain text