HttpBodyHandler class

HttpBodyHandler is a helper class for processing and collecting HTTP message data in an easy-to-use HttpBody object. The content body is parsed, depending on the Content-Type header field. When the full body is read and parsed the body content is made available. The class can be used to process both server requests and client responses.

The following content types are recognized:

text/ *
application/json
application/x-www-form-urlencoded
multipart/form-data

For content type text/\* the body is decoded into a string. The 'charset' parameter of the content type specifies the encoding used for decoding. If no 'charset' is present the default encoding of ISO-8859-1 is used.

For content type application/json the body is decoded into a string which is then parsed as JSON. The resulting body is a Map. The 'charset' parameter of the content type specifies the encoding used for decoding. If no 'charset' is present the default encoding of UTF-8 is used.

For content type application/x-www-form-urlencoded the body is a query string which is then split according to the rules for splitting a query string. The resulting body is a Map<String, String>. If the same name is present several times in the query string, then the last value seen for this name will be in the resulting map. The encoding US-ASCII is always used for decoding the body.

For content type multipart/form-data the body is parsed into it's different fields. The resulting body is a Map<String, dynamic>, where the value is a String for normal fields and a HttpBodyFileUpload instance for file upload fields. If the same name is present several times, then the last value seen for this name will be in the resulting map.

When using content type multipart/form-data the encoding of fields with String values is determined by the browser sending the HTTP request with the form data. The encoding is specified either by the attribute accept-charset on the HTML form, or by the content type of the web page containing the form. If the HTML form has an accept-charset attribute the browser will use the encoding specified there. If the HTML form has no accept-charset attribute the browser determines the encoding from the content type of the web page containing the form. Using a content type of text/html; charset=utf-8 for the page and setting accept-charset on the HTML form to utf-8 is recommended as the default for HttpBodyHandler is UTF-8. It is important to get these encoding values right, as the actual multipart/form-data HTTP request sent by the browser does not contain any information on the encoding. If something else than UTF-8 is used defaultEncoding needs to be set in the HttpBodyHandler constructor and calls to processRequest and processResponse.

For all other content types the body will be treated as uninterpreted binary data. The resulting body will be of type List<int>.

To use with the HttpServer for request messages, HttpBodyHandler can be used as either a StreamTransformer or as a per-request handler (see processRequest).

HttpServer server = ...
server.transform(new HttpBodyHandler())
    .listen((HttpRequestBody body) {
      ...
    });

To use with the HttpClient for response messages, HttpBodyHandler can be used as a per-request handler (see processResponse).

HttpClient client = ...
client.get(...)
    .then((HttpClientRequest response) => response.close())
    .then(HttpBodyHandler.processResponse)
    .then((HttpClientResponseBody body) {
      ...
    });
Inheritance

Constructors

HttpBodyHandler({Encoding defaultEncoding: utf8})
Create a new HttpBodyHandler to be used with a Stream<HttpRequest>, e.g. a HttpServer. [...]

Properties

hashCode int
The hash code for this object. [...]
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited

Methods

bind(Stream<HttpRequest> stream) Stream<HttpRequestBody>
Transforms the provided stream. [...]
override
cast<RS, RT>() StreamTransformer<RS, RT>
Provides a StreamTransformer<RS, RT> view of this stream transformer. [...]
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
toString() String
Returns a string representation of this object.
inherited

Operators

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

Static Methods

processRequest(HttpRequest request, {Encoding defaultEncoding: utf8}) Future<HttpRequestBody>
Process and parse an incoming HttpRequest. The returned HttpRequestBody contains a response field for accessing the HttpResponse. [...]
processResponse(HttpClientResponse response, {Encoding defaultEncoding: utf8}) Future<HttpClientResponseBody>
Process and parse an incoming HttpClientResponse. [...]