我在 github https://github.com/googleapis/google-cloud-go/issues/1025上阅读了以下问题,发现创建的空闲连接存在内存泄漏,因此将 http 客户端添加到 ClientOption 可以诡计。但是,我想使用“WithCredentialsFile”选项来实现它,但根据文档,“WithHTTPClient”不兼容。以下是我的方法: client, err := storage.NewClient(ctx, option.WithCredentialsFile(cred), option.WithHTTPClient(httpClient)) if err != nil { return err } defer client.Close()而且我总是收到以下错误:"googleapi: Error 401: Anonymous caller does not have storage.objects.create access to <filepath>, required"有什么解决方法吗?更新:我在调用 newClient 时尝试了以下方法来摆脱 withCred os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", cre) client, err := storage.NewClient(ctx, option.WithHTTPClient(httpClient)) if err != nil { return err } defer client.Close()但它仍然导致上述错误。如果我尝试删除 withHttp 会导致内存泄漏(至少上传有效)
2 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
我不知道您如何创建 HttpClient。在任何情况下,如果你指定了你的 HTTPClient,它就会被使用,而这个默认不是
但是,使用的传输层是您的 HTTPClient 之一。默认情况下,它不嵌入库默认创建的安全层(并且使用您的凭据)。您必须在 HTTPClient 中重现此逻辑。
因此,当您调用端点时,您调用它时没有任何安全标头,因此,您的 401 错误是正常的。
森林海
TA贡献2011条经验 获得超2个赞
我相信这将允许您使用自己的 HTTP 客户端。
import {
gcpTransport "google.golang.org/api/transport/http"
}
...
httpClient.Transport, err = gcpTransport.NewTransport(ctx, option.WithCredentialsFile(cred))
if err != nil {
return err
}
client, err := storage.NewClient(ctx, option.WithHTTPClient(httpClient))
if err != nil {
return err
}
defer client.Close()
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消