Configure a proxy

Google Cloud client libraries use HTTPS and gRPC in underlying communication with the services. In both protocols, you can configure a proxy using https.proxyHost and, optionally, https.proxyPort properties.

Configure a proxy with HTTP

For HTTP clients, you can configure a basic proxy by using http.proxyHost and related system properties, as documented by Java Networking and Proxies.

For a custom proxy (for example, an authenticated proxy), provide a custom HttpTransportFactory to GoogleCredentials:

import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.apache.v2.ApacheHttpTransport;
import com.google.auth.http.HttpTransportFactory;
import com.google.auth.oauth2.GoogleCredentials;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.routing.HttpRoutePlanner;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.ProxyAuthenticationStrategy;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;


import java.io.IOException;


public class ProxyExample {
 public GoogleCredentials getCredentials() throws IOException {
   HttpTransportFactory httpTransportFactory = getHttpTransportFactory(
       "some-host", 8080, "some-username", "some-password"
   );


   return GoogleCredentials.getApplicationDefault(httpTransportFactory);
 }


 public HttpTransportFactory getHttpTransportFactory(String proxyHost, int proxyPort, String proxyUsername, String proxyPassword) {
   HttpHost proxyHostDetails = new HttpHost(proxyHost, proxyPort);
   HttpRoutePlanner httpRoutePlanner = new DefaultProxyRoutePlanner(proxyHostDetails);


   CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
   credentialsProvider.setCredentials(
       new AuthScope(proxyHostDetails.getHostName(), proxyHostDetails.getPort()),
       new UsernamePasswordCredentials(proxyUsername, proxyPassword)
   );


   HttpClient httpClient = ApacheHttpTransport.newDefaultHttpClientBuilder()
       .setRoutePlanner(httpRoutePlanner)
       .setProxyAuthenticationStrategy(ProxyAuthenticationStrategy