in golang/client/client.go [387:559]
func (client *Client) DoROARequest(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
_runtime := dara.NewRuntimeObject(map[string]interface{}{
"key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
"cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
"ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
"readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
"httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
"httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
"noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
"socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
"socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
"maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
"retryOptions": client.RetryOptions,
"ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
"httpClient": client.HttpClient,
"tlsMinVersion": dara.StringValue(client.TlsMinVersion),
})
var retryPolicyContext *dara.RetryPolicyContext
var request_ *dara.Request
var response_ *dara.Response
var _resultErr error
retriesAttempted := int(0)
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
}
_result = make(map[string]interface{})
for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
_resultErr = nil
_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
dara.Sleep(_backoffDelayTime)
request_ = dara.NewRequest()
request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
request_.Method = method
request_.Pathname = pathname
globalQueries := make(map[string]*string)
globalHeaders := make(map[string]*string)
if !dara.IsNil(client.GlobalParameters) {
globalParams := client.GlobalParameters
if !dara.IsNil(globalParams.Queries) {
globalQueries = globalParams.Queries
}
if !dara.IsNil(globalParams.Headers) {
globalHeaders = globalParams.Headers
}
}
extendsHeaders := make(map[string]*string)
extendsQueries := make(map[string]*string)
if !dara.IsNil(runtime.ExtendsParameters) {
extendsParameters := runtime.ExtendsParameters
if !dara.IsNil(extendsParameters.Headers) {
extendsHeaders = extendsParameters.Headers
}
if !dara.IsNil(extendsParameters.Queries) {
extendsQueries = extendsParameters.Queries
}
}
request_.Headers = dara.Merge(map[string]*string{
"date": openapiutil.GetDateUTCString(),
"host": client.Endpoint,
"accept": dara.String("application/json"),
"x-acs-signature-nonce": openapiutil.GetNonce(),
"x-acs-signature-method": dara.String("HMAC-SHA1"),
"x-acs-signature-version": dara.String("1.0"),
"x-acs-version": version,
"x-acs-action": action,
"user-agent": openapiutil.GetUserAgent(client.UserAgent),
}, globalHeaders,
extendsHeaders,
request.Headers)
if !dara.IsNil(request.Body) {
request_.Body = dara.ToReader(dara.Stringify(request.Body))
request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
}
request_.Query = dara.Merge(globalQueries,
extendsQueries)
if !dara.IsNil(request.Query) {
request_.Query = dara.Merge(request_.Query,
request.Query)
}
if dara.StringValue(authType) != "Anonymous" {
if dara.IsNil(client.Credential) {
_err = &ClientError{
Code: dara.String("InvalidCredentials"),
Message: dara.String("Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."),
}
if dara.BoolValue(client.DisableSDKError) != true {
_err = dara.TeaSDKError(_err)
}
return _result, _err
}
credentialModel, _err := client.Credential.GetCredential()
if _err != nil {
retriesAttempted++
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
HttpRequest: request_,
HttpResponse: response_,
Exception: _err,
}
_resultErr = _err
continue
}
if !dara.IsNil(credentialModel.ProviderName) {
request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
}
credentialType := dara.StringValue(credentialModel.Type)
if credentialType == "bearer" {
bearerToken := dara.StringValue(credentialModel.BearerToken)
request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
} else {
accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
securityToken := dara.StringValue(credentialModel.SecurityToken)
if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
request_.Headers["x-acs-security-token"] = dara.String(securityToken)
}
stringToSign := dara.StringValue(openapiutil.GetStringToSign(request_))
request_.Headers["authorization"] = dara.String("acs " + accessKeyId + ":" + dara.StringValue(openapiutil.GetROASignature(dara.String(stringToSign), dara.String(accessKeySecret))))
}
}
response_, _err := dara.DoRequest(request_, _runtime)
if _err != nil {
retriesAttempted++
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
HttpRequest: request_,
HttpResponse: response_,
Exception: _err,
}
_resultErr = _err
continue
}
_result, _err = doROARequest_opResponse(response_, client, bodyType)
if _err != nil {
retriesAttempted++
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
HttpRequest: request_,
HttpResponse: response_,
Exception: _err,
}
_resultErr = _err
continue
}
return _result, _err
}
if dara.BoolValue(client.DisableSDKError) != true {
_resultErr = dara.TeaSDKError(_resultErr)
}
return _result, _resultErr
}