Thread-safe HTTP transport for Google App Engine based on URL Fetch.
Implementation is thread-safe. For maximum efficiency, applications should use a single
globally-shared instance of the HTTP transport.
URL Fetch is only available on Google App Engine (not on any other Java environment), and is
the underlying HTTP transport used for App Engine. Their implementation of HttpURLConnection is simply an abstraction layer on top of URL Fetch. By implementing a
transport that directly uses URL Fetch, we can optimize the behavior slightly, and can
potentially take advantage of features in URL Fetch that are not available in HttpURLConnection. Furthermore, there is currently a serious bug in how HTTP headers are
processed in the App Engine implementation of HttpURLConnection, which we are able to
avoid using this implementation. Therefore, this is the recommended transport to use on App
Engine.
[[["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 UrlFetchTransport (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.extensions.appengine.http.UrlFetchTransport)\n- [1.47.1](/java/docs/reference/google-http-client/1.47.1/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.46.3](/java/docs/reference/google-http-client/1.46.3/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.45.3](/java/docs/reference/google-http-client/1.45.3/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.44.2](/java/docs/reference/google-http-client/1.44.2/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.43.2](/java/docs/reference/google-http-client/1.43.2/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.42.3](/java/docs/reference/google-http-client/1.42.3/com.google.api.client.extensions.appengine.http.UrlFetchTransport)\n- [1.41.8](/java/docs/reference/google-http-client/1.41.8/com.google.api.client.extensions.appengine.http.UrlFetchTransport) \n\n public final class UrlFetchTransport extends HttpTransport\n\nThread-safe HTTP transport for Google App Engine based on [URL Fetch](https://cloud.google.com/appengine/docs/standard/java/issue-requests).\n\nImplementation is thread-safe. For maximum efficiency, applications should use a single\nglobally-shared instance of the HTTP transport.\n\nURL Fetch is only available on Google App Engine (not on any other Java environment), and is\nthe underlying HTTP transport used for App Engine. Their implementation of [HttpURLConnection](https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html) is simply an abstraction layer on top of URL Fetch. By implementing a\ntransport that directly uses URL Fetch, we can optimize the behavior slightly, and can\npotentially take advantage of features in URL Fetch that are not available in [HttpURLConnection](https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html). Furthermore, there is currently a serious bug in how HTTP headers are\nprocessed in the App Engine implementation of [HttpURLConnection](https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html), which we are able to\navoid using this implementation. Therefore, this is the recommended transport to use on App\nEngine. \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 UrlFetchTransport \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### getDefaultInstance()\n\n public static UrlFetchTransport getDefaultInstance()\n\nReturns a global thread-safe instance.\n\nConstructors\n------------\n\n### UrlFetchTransport()\n\n public UrlFetchTransport()\n\nConstructor with the default fetch options.\n\nUse Builder to modify fetch options.\n\nMethods\n-------\n\n### buildRequest(String method, String url)\n\n protected UrlFetchRequest 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### 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_)"]]