HttpClient class abstract

A client that receives content, such as web pages, from a server using the HTTP protocol.

HttpClient contains a number of methods to send an HttpClientRequest to an Http server and receive an HttpClientResponse back. For example, you can use the get, getUrl, post, and postUrl methods for GET and POST requests, respectively.

Making a simple GET request: an example

A getUrl request is a two-step process, triggered by two Futures. When the first future completes with a HttpClientRequest, the underlying network connection has been established, but no data has been sent. In the callback function for the first future, the HTTP headers and body can be set on the request. Either the first write to the request object or a call to close sends the request to the server.

When the HTTP response is received from the server, the second future, which is returned by close, completes with an HttpClientResponse object. This object provides access to the headers and body of the response. The body is available as a stream implemented by HttpClientResponse. If a body is present, it must be read. Otherwise, it leads to resource leaks. Consider using HttpClientResponse.drain if the body is unused.

HttpClient client = HttpClient();
client.getUrl(Uri.parse("http://www.example.com/"))
    .then((HttpClientRequest request) {
      // Optionally set up headers...
      // Optionally write to the request object...
      // Then call close.
      ...
      return request.close();
    })
    .then((HttpClientResponse response) {
      // Process the response.
      ...
    });

The future for HttpClientRequest is created by methods such as getUrl and open.

HTTPS connections

An HttpClient can make HTTPS requests, connecting to a server using the TLS (SSL) secure networking protocol. Calling getUrl with an https: scheme will work automatically, if the server's certificate is signed by a root CA (certificate authority) on the default list of well-known trusted CAs, compiled by Mozilla.

To add a custom trusted certificate authority, or to send a client certificate to servers that request one, pass a SecurityContext object as the optional context argument to the HttpClient constructor. The desired security options can be set on the SecurityContext object.

Headers

All HttpClient requests set the following header by default:

Accept-Encoding: gzip

This allows the HTTP server to use gzip compression for the body if possible. If this behavior is not desired set the Accept-Encoding header to something else. To turn off gzip compression of the response, clear this header:

 request.headers.removeAll(HttpHeaders.acceptEncodingHeader)

Closing the HttpClient

The HttpClient supports persistent connections and caches network connections to reuse them for multiple requests whenever possible. This means that network connections can be kept open for some time after a request has completed. Use HttpClient.close to force the HttpClient object to shut down and to close the idle network connections.

Turning proxies on and off

By default the HttpClient uses the proxy configuration available from the environment, see findProxyFromEnvironment. To turn off the use of proxies set the findProxy property to null.

HttpClient client = HttpClient();
client.findProxy = null;
Implemented types

Constructors

HttpClient.new({SecurityContext? context})
General Library Documentation Undocument By General Corporation & Global Corporation & General Developer
factory

Properties

authenticate Future<bool> Function(Uri url, String scheme, String? realm)?
Sets the function to be called when a site is requesting authentication.
no getterinherited
authenticateProxy Future<bool> Function(String host, int port, String scheme, String? realm)?
Sets the function to be called when a proxy is requesting authentication.
no getterinherited
autoUncompress bool
Gets and sets whether the body of a response will be automatically uncompressed.
getter/setter pairinherited
badCertificateCallback bool Function(X509Certificate cert, String host, int port)?
Sets a callback that will decide whether to accept a secure connection with a server certificate that cannot be authenticated by any of our trusted root certificates.
no getterinherited
connectionFactory Future<ConnectionTask<Socket>> Function(Uri url, String? proxyHost, int? proxyPort)?
Sets the function used to create socket connections.
no getterinherited
connectionTimeout Duration?
Gets and sets the connection timeout.
getter/setter pairinherited
findProxy String Function(Uri url)?
Sets the function used to resolve the proxy server to be used for opening a HTTP connection to the specified url. If this function is not set, direct connections will always be used.
no getterinherited
hashCode int
The hash code for this object.
no setterinherited
idleTimeout Duration
Gets and sets the idle timeout of non-active persistent (keep-alive) connections.
getter/setter pairinherited
keyLog ← dynamic Function(String line)?
Sets a callback that will be called when new TLS keys are exchanged with the server. It will receive one line of text in NSS Key Log Format for each call. Writing these lines to a file will allow tools (such as Wireshark) to decrypt communication between the this client and the server. This is meant to allow network-level debugging of secure sockets and should not be used in production code. For example:
no getterinherited
maxConnectionsPerHost int?
Gets and sets the maximum number of live connections, to a single host.
getter/setter pairinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
userAgent String?
Gets and sets the default value of the User-Agent header for all requests generated by this HttpClient.
getter/setter pairinherited

Methods

addCredentials(Uri url, String realm, HttpClientCredentials credentials) → void
Add credentials to be used for authorizing HTTP requests.
inherited
addProxyCredentials(String host, int port, String realm, HttpClientCredentials credentials) → void
Add credentials to be used for authorizing HTTP proxies.
inherited
close({bool force = false}) → void
Shuts down the HTTP client.
inherited
delete(String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection using the DELETE method.
inherited
deleteUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the DELETE method.
inherited
get(String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection using the GET method.
inherited
getUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the GET method.
inherited
Opens a HTTP connection using the HEAD method.
inherited
headUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the HEAD method.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
open(String method, String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection.
inherited
openUrl(String method, Uri url) Future<HttpClientRequest>
Opens a HTTP connection.
inherited
patch(String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection using the PATCH method.
inherited
patchUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the PATCH method.
inherited
post(String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection using the POST method.
inherited
postUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the POST method.
inherited
put(String host, int port, String path) Future<HttpClientRequest>
Opens a HTTP connection using the PUT method.
inherited
putUrl(Uri url) Future<HttpClientRequest>
Opens a HTTP connection using the PUT method.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Properties

enableTimelineLogging bool
Current state of HTTP request logging from all HttpClients to the developer timeline.
getter/setter pair

Static Methods

findProxyFromEnvironment(Uri url, {Map<String, String>? environment}) String
Function for resolving the proxy server to be used for a HTTP connection from the proxy configuration specified through environment variables.
override

Constants

defaultHttpPort → const int
General Library Documentation Undocument By General Corporation & Global Corporation & General Developer
defaultHttpsPort → const int
General Library Documentation Undocument By General Corporation & Global Corporation & General Developer