Closed pastel001 closed 2 years ago
linux 配置系统代理 export http_proxy=http://username:password@proxyhost:proxyport 最小复现代码
package main import ( "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" ) func main() { client, err := sdk.NewClientWithAccessKey("cn-beijing", "xxx", "xxx") if err != nil { panic(err) } request := requests.NewCommonRequest() request.Method = "GET" request.Scheme = "https" // https | http request.Domain = "cr.cn-beijing.aliyuncs.com" request.Version = "2016-06-07" request.PathPattern = "/repos/xxx/xxxx/tags" request.Headers["Content-Type"] = "application/json" response, err := client.ProcessCommonRequest(request) if err != nil { panic(err) } fmt.Print(response.GetHttpContentString()) }
panic: SDK.ServerError ErrorCode: MissingAccessKeyId Recommend: https://troubleshoot.api.aliyun.com?q=MissingAccessKeyId&product=cr RequestId: 4BB0953B-9488-56CD-90B0-7B1535329B18 Message: AccessKeyId is mandatory for this action.
https://github.com/aliyun/alibaba-cloud-sdk-go/blob/v1.61.1536/sdk/client.go 601到605行,错误的把之前设置用于调用阿里云sdk的Authorization字段被替换成了代理的basic认证
if proxy != nil && proxy.User != nil { if password, passwordSet := proxy.User.Password(); passwordSet { httpRequest.SetBasicAuth(proxy.User.Username(), password) } }
这块代码可以设置Proxy-Authorization字段而不是Authorization字段。 或者直接删掉,因为client.httpClient.Transport里面已经设置了代理
if trans, ok := client.httpClient.Transport.(*http.Transport); ok && trans != nil { if trans.TLSClientConfig != nil { trans.TLSClientConfig.InsecureSkipVerify = client.getHTTPSInsecure(request) } else { trans.TLSClientConfig = &tls.Config{ InsecureSkipVerify: client.getHTTPSInsecure(request), } } if proxy != nil && !flag { trans.Proxy = http.ProxyURL(proxy) } client.httpClient.Transport = trans }
httpResponse, err = hookDo(client.httpClient.Do)(httpRequest)
中会在请求中添加Proxy-Authorization字段
已修复并发布,release 为 v1.61.1578 https://github.com/aliyun/alibaba-cloud-sdk-go/pull/565
前提条件:
linux 配置系统代理 export http_proxy=http://username:password@proxyhost:proxyport 最小复现代码
SDK应答
panic: SDK.ServerError ErrorCode: MissingAccessKeyId Recommend: https://troubleshoot.api.aliyun.com?q=MissingAccessKeyId&product=cr RequestId: 4BB0953B-9488-56CD-90B0-7B1535329B18 Message: AccessKeyId is mandatory for this action.
sdk中的错误位置:
https://github.com/aliyun/alibaba-cloud-sdk-go/blob/v1.61.1536/sdk/client.go 601到605行,错误的把之前设置用于调用阿里云sdk的Authorization字段被替换成了代理的basic认证
修改:
这块代码可以设置Proxy-Authorization字段而不是Authorization字段。 或者直接删掉,因为client.httpClient.Transport里面已经设置了代理
中会在请求中添加Proxy-Authorization字段