Class HttpTransport (1.45.0)

public abstract class HttpTransport

Thread-safe abstract HTTP transport.

Implementation is thread-safe, and subclasses must be thread-safe. For maximum efficiency, applications should use a single globally-shared instance of the HTTP transport.

The recommended concrete implementation HTTP transport library to use depends on what environment you are running in:

  • Google App Engine: use com.google.api.client.extensions.appengine.http.UrlFetchTransport.
    • com.google.api.client.apache.ApacheHttpTransport doesn't work on App Engine because the Apache HTTP Client opens its own sockets (though in theory there are ways to hack it to work on App Engine that might work).
    • com.google.api.client.javanet.NetHttpTransport is discouraged due to a bug in the App Engine SDK itself in how it parses HTTP headers in the response.
  • Android:
    • For maximum backwards compatibility with older SDK's use newCompatibleTransport from com.google.api.client.extensions.android.http.AndroidHttp (read its JavaDoc for details).
    • If your application is targeting Gingerbread (SDK 2.3) or higher, simply use com.google.api.client.javanet.NetHttpTransport.
  • Other Java environments
    • com.google.api.client.googleapis.javanet.GoogleNetHttpTransport is included in google-api-cient 1.22.0, so easy to include.
    • com.google.api.client.javanet.NetHttpTransport is based on the HttpURLConnection built into the Java SDK, so it used to be the preferred choice.
    • com.google.api.client.apache.ApacheHttpTransport is a good choice for users of the Apache HTTP Client, especially if you need some of the configuration options available in that library.

Some HTTP transports do not support all HTTP methods. Use #supportsMethod(String) to check if a certain HTTP method is supported. Calling #buildRequest() on a method that is not supported will result in an IllegalArgumentException.

Subclasses should override #supportsMethod(String) and #buildRequest(String, String) to build requests and specify which HTTP methods are supported.

Inheritance

java.lang.Object > HttpTransport

Constructors

HttpTransport()

public HttpTransport()

Methods

buildRequest(String method, String url)

protected abstract LowLevelHttpRequest buildRequest(String method, String url)

Builds a low level HTTP request for the given HTTP method.

Parameters
Name Description
method String

HTTP method

url String

URL

Returns
Type Description
LowLevelHttpRequest

new low level HTTP request

Exceptions
Type Description
IOException

if HTTP method is not supported

createRequestFactory()

public final HttpRequestFactory createRequestFactory()

Returns a new instance of an HTTP request factory based on this HTTP transport.

Returns
Type Description
HttpRequestFactory

new instance of an HTTP request factory

createRequestFactory(HttpRequestInitializer initializer)

public final HttpRequestFactory createRequestFactory(HttpRequestInitializer initializer)

Returns a new instance of an HTTP request factory based on this HTTP transport with the given HTTP request initializer.

Parameter
Name Description
initializer HttpRequestInitializer

HTTP request initializer or null for none

Returns
Type Description
HttpRequestFactory

new instance of an HTTP request factory

isMtls()

public boolean isMtls()

Returns whether the transport is mTLS.

Returns
Type Description
boolean

boolean indicating if the transport is mTLS.

isShutdown()

public boolean isShutdown()

Returns whether the transport is shutdown or not.

Returns
Type Description
boolean

true if the transport is shutdown.

shutdown()

public void shutdown()

Default implementation does nothing, but subclasses may override to possibly release allocated system resources or close connections.

Exceptions
Type Description
IOException

I/O exception

supportsMethod(String method)

public boolean supportsMethod(String method)

Returns whether a specified HTTP method is supported by this transport.

Default implementation returns true if and only if the request method is "DELETE", "GET", "POST", or "PUT". Subclasses should override.

Parameter
Name Description
method String

HTTP method

Returns
Type Description
boolean
Exceptions
Type Description
IOException

I/O exception