in golang/client/client.go [780:1010]
func (client *Client) DoRequest(params *openapiutil.Params, 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(params.Protocol))))
request_.Method = params.Method
request_.Pathname = params.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_.Query = dara.Merge(globalQueries,
extendsQueries,
request.Query)
// endpoint is setted in product client
request_.Headers = dara.Merge(map[string]*string{
"host": client.Endpoint,
"x-acs-version": params.Version,
"x-acs-action": params.Action,
"user-agent": openapiutil.GetUserAgent(client.UserAgent),
"x-acs-date": openapiutil.GetTimestamp(),
"x-acs-signature-nonce": openapiutil.GetNonce(),
"accept": dara.String("application/json"),
}, globalHeaders,
extendsHeaders,
request.Headers)
if dara.StringValue(params.Style) == "RPC" {
headers, _err := client.GetRpcHeaders()
if _err != nil {
retriesAttempted++
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
HttpRequest: request_,
HttpResponse: response_,
Exception: _err,
}
_resultErr = _err
continue
}
if !dara.IsNil(headers) {
request_.Headers = dara.Merge(request_.Headers,
headers)
}
}
signatureAlgorithm := dara.ToString(dara.Default(dara.StringValue(client.SignatureAlgorithm), "ACS3-HMAC-SHA256"))
hashedRequestPayload := openapiutil.Hash(dara.BytesFromString("", "utf-8"), dara.String(signatureAlgorithm))
if !dara.IsNil(request.Stream) {
tmp, _err := dara.ReadAsBytes(request.Stream)
if _err != nil {
retriesAttempted++
retryPolicyContext = &dara.RetryPolicyContext{
RetriesAttempted: retriesAttempted,
HttpRequest: request_,
HttpResponse: response_,
Exception: _err,
}
_resultErr = _err
continue
}
hashedRequestPayload = openapiutil.Hash(tmp, dara.String(signatureAlgorithm))
request_.Body = dara.ToReader(tmp)
request_.Headers["content-type"] = dara.String("application/octet-stream")
} else {
if !dara.IsNil(request.Body) {
if dara.StringValue(params.ReqBodyType) == "byte" {
byteObj := []byte(dara.ToString(request.Body))
hashedRequestPayload = openapiutil.Hash(byteObj, dara.String(signatureAlgorithm))
request_.Body = dara.ToReader(byteObj)
} else if dara.StringValue(params.ReqBodyType) == "json" {
jsonObj := dara.Stringify(request.Body)
hashedRequestPayload = openapiutil.Hash(dara.ToBytes(jsonObj, "utf8"), dara.String(signatureAlgorithm))
request_.Body = dara.ToReader(dara.String(jsonObj))
request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
} else {
m := dara.ToMap(request.Body)
formObj := dara.StringValue(openapiutil.ToForm(m))
hashedRequestPayload = openapiutil.Hash(dara.ToBytes(formObj, "utf8"), dara.String(signatureAlgorithm))
request_.Body = dara.ToReader(dara.String(formObj))
request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
}
}
}
request_.Headers["x-acs-content-sha256"] = dara.String(hex.EncodeToString(hashedRequestPayload))
if dara.StringValue(params.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
}
authType := dara.StringValue(credentialModel.Type)
if authType == "bearer" {
bearerToken := dara.StringValue(credentialModel.BearerToken)
request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
if dara.StringValue(params.Style) == "RPC" {
request_.Query["SignatureType"] = dara.String("BEARERTOKEN")
} else {
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)
}
request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, dara.String(signatureAlgorithm), dara.String(hex.EncodeToString(hashedRequestPayload)), dara.String(accessKeyId), 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 = doRequest_opResponse(response_, client, params)
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
}