Thread-safe HTTP transport based on the Apache HTTP Client library.
Implementation is thread-safe, as long as any parameter modification to the Apache HTTP Client is only done at initialization time. For maximum efficiency,
applications should use a single globally-shared instance of the HTTP transport.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[],[],null,["# Class ApacheHttpTransport (2.0.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.0.0 (latest)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.47.1](/java/docs/reference/google-http-client/1.47.1/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.46.3](/java/docs/reference/google-http-client/1.46.3/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.45.3](/java/docs/reference/google-http-client/1.45.3/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.44.2](/java/docs/reference/google-http-client/1.44.2/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.43.2](/java/docs/reference/google-http-client/1.43.2/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.42.3](/java/docs/reference/google-http-client/1.42.3/com.google.api.client.http.apache.v2.ApacheHttpTransport)\n- [1.41.8](/java/docs/reference/google-http-client/1.41.8/com.google.api.client.http.apache.v2.ApacheHttpTransport) \n\n public final class ApacheHttpTransport extends HttpTransport\n\nThread-safe HTTP transport based on the Apache HTTP Client library.\n\nImplementation is thread-safe, as long as any parameter modification to the [Apache HTTP Client](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_getHttpClient__) is only done at initialization time. For maximum efficiency,\napplications should use a single globally-shared instance of the HTTP transport.\n\nDefault settings are specified in [#newDefaultHttpClient()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_newDefaultHttpClient__). Use the [#ApacheHttpTransport(HttpClient)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_ApacheHttpTransport_org_apache_http_client_HttpClient_) constructor to override the Apache HTTP Client used. Please\nread the [Apache HTTP Client connection management tutorial](https://hc.apache.org/httpcomponents-client-4.5.x/current/tutorial/pdf/httpclient-tutorial.pdf) for more complex configuration options. \n\nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e [HttpTransport](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport) \\\u003e ApacheHttpTransport \n\nInherited Members\n-----------------\n\n[HttpTransport.buildRequest(String,String)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_buildRequest_java_lang_String_java_lang_String_) \n[HttpTransport.createRequestFactory()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_createRequestFactory__) \n[HttpTransport.createRequestFactory(HttpRequestInitializer)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_createRequestFactory_com_google_api_client_http_HttpRequestInitializer_) \n[HttpTransport.isMtls()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_isMtls__) \n[HttpTransport.isShutdown()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_isShutdown__) \n[HttpTransport.shutdown()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_shutdown__) \n[HttpTransport.supportsMethod(String)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_supportsMethod_java_lang_String_) \n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nStatic Methods\n--------------\n\n### newDefaultHttpClient()\n\n public static HttpClient newDefaultHttpClient()\n\nCreates a new instance of the Apache HTTP client that is used by the [#ApacheHttpTransport()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_ApacheHttpTransport__) constructor.\n\nSettings:\n\n- The client connection manager is set to PoolingHttpClientConnectionManager.\n- \\\u003cThe retry mechanism is turned off using HttpClientBuilder#disableRedirectHandling.\n- The route planner uses SystemDefaultRoutePlanner with ProxySelector#getDefault(), which uses the proxy settings from [system\n properties](https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html).\n\n### newDefaultHttpClientBuilder()\n\n public static HttpClientBuilder newDefaultHttpClientBuilder()\n\nCreates a new Apache HTTP client builder that is used by the [#ApacheHttpTransport()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_ApacheHttpTransport__)\nconstructor.\n\nSettings:\n\n- The client connection manager is set to PoolingHttpClientConnectionManager.\n- \\\u003cThe retry mechanism is turned off using HttpClientBuilder#disableRedirectHandling.\n- The route planner uses SystemDefaultRoutePlanner with ProxySelector#getDefault(), which uses the proxy settings from [system\n properties](http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html).\n\nConstructors\n------------\n\n### ApacheHttpTransport()\n\n public ApacheHttpTransport()\n\nConstructor that uses [#newDefaultHttpClient()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.apache.v2.ApacheHttpTransport#com_google_api_client_http_apache_v2_ApacheHttpTransport_newDefaultHttpClient__) for the Apache HTTP client.\n\n### ApacheHttpTransport(HttpClient httpClient)\n\n public ApacheHttpTransport(HttpClient httpClient)\n\nConstructor that allows an alternative Apache HTTP client to be used.\n\nNote that in the previous version, we overrode several settings. However, we are no longer\nable to do so.\n\nIf you choose to provide your own Apache HttpClient implementation, be sure that\n\n- HTTP version is set to 1.1.\n- Redirects are disabled (google-http-client handles redirects).\n- Retries are disabled (google-http-client handles retries).\n\n### ApacheHttpTransport(HttpClient httpClient, boolean isMtls)\n\n public ApacheHttpTransport(HttpClient httpClient, boolean isMtls)\n\n[Beta](/java/docs/reference/google-http-client/latest/com.google.api.client.util.Beta) \n\nConstructor that allows an alternative Apache HTTP client to be used.\n\nNote that in the previous version, we overrode several settings. However, we are no longer\nable to do so.\n\nIf you choose to provide your own Apache HttpClient implementation, be sure that\n\n- HTTP version is set to 1.1.\n- Redirects are disabled (google-http-client handles redirects).\n- Retries are disabled (google-http-client handles retries).\n\nMethods\n-------\n\n### buildRequest(String method, String url)\n\n protected ApacheHttpRequest buildRequest(String method, String url)\n\nBuilds a low level HTTP request for the given HTTP method.\n\n**Overrides** \n[HttpTransport.buildRequest(String method, String url)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_buildRequest_java_lang_String_java_lang_String_)\n\n### getHttpClient()\n\n public HttpClient getHttpClient()\n\nReturns the Apache HTTP client.\n\n### isMtls()\n\n public boolean isMtls()\n\nReturns if the underlying HTTP client is mTLS.\n\n**Overrides** \n[HttpTransport.isMtls()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_isMtls__)\n\n### shutdown()\n\n public void shutdown()\n\nShuts down the connection manager and releases allocated resources. This closes all\nconnections, whether they are currently used or not.\n**Overrides** \n[HttpTransport.shutdown()](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_shutdown__)\n\n### supportsMethod(String method)\n\n public boolean supportsMethod(String method)\n\nReturns whether a specified HTTP method is supported by this transport.\n\nDefault implementation returns true if and only if the request method is `\"DELETE\"`,\n`\"GET\"`, `\"POST\"`, or `\"PUT\"`. Subclasses should override.\n\n**Overrides** \n[HttpTransport.supportsMethod(String method)](/java/docs/reference/google-http-client/latest/com.google.api.client.http.HttpTransport#com_google_api_client_http_HttpTransport_supportsMethod_java_lang_String_)"]]