var proxy = new java.net.Proxy(
    java.net.Proxy.Type.HTTP,
    new java.net.InetSocketAddress("proxy.example.net", 8080));

com.google.auth.http.HttpTransportFactory factory = () ->
    new com.google.api.client.http.javanet.NetHttpTransport.Builder()
        .setProxy(proxy)
        .build();

var credentials =
    com.google.auth.oauth2.GoogleCredentials.getApplicationDefault(factory);

var transportOptions =
    com.google.cloud.http.HttpTransportOptions.newBuilder()
        .setHttpTransportFactory(factory)
        .build();

var storage = com.google.cloud.storage.StorageOptions.http()
    .setCredentials(credentials)
    .setTransportOptions(transportOptions)
    .build()
    .getService();

应用的常规 Application Default Credentials 设置保持不变。在允许为 Storage 和令牌端点使用公共代理的场景中,HTTP 代理列表可为 InetSocketAddress 的主机和端口提供候选。请在加载这些凭据时就提供该工厂,赶在其 HTTP 令牌请求需要它之前。

有两处输入使用该工厂:getApplicationDefault(factory) 覆盖凭据实现的 HTTP 工作;HttpTransportOptions 覆盖 Storage 的 HTTP 服务。两者互不自动配置。

StorageOptions.http 自 Java Storage 2.14.0 起可用。请区分清楚库类型:HttpTransportOptions 属于 Google Cloud Core,NetHttpTransport 属于 Google 的 HTTP 客户端库。

gRPC 专用的 Storage 客户端使用另一种传输。为此工厂定制应选择 HTTP 构建器,而不是把仅适用于 HTTP 的选项附加到 gRPC 通道上。

相关文章