diff --git a/lib/src/base_client.dart b/lib/src/base_client.dart index ff5b23d94b..204393d638 100644 --- a/lib/src/base_client.dart +++ b/lib/src/base_client.dart @@ -152,8 +152,14 @@ abstract class BaseClient implements Client { if (url is String) url = Uri.parse(url); var request = Request(method, url); - if (headers != null) request.headers.addAll(headers); - if (encoding != null) request.encoding = encoding; + if (headers != null) { + request.headers.addAll(headers); + } + if (encoding != null) { + request.encoding = encoding; + } else { + request.isIgnoreEncoding = true; + } if (body != null) { if (body is String) { request.body = body; diff --git a/lib/src/request.dart b/lib/src/request.dart index f18959d8b2..069e393953 100644 --- a/lib/src/request.dart +++ b/lib/src/request.dart @@ -13,6 +13,8 @@ import 'utils.dart'; /// An HTTP request where the entire request body is known in advance. class Request extends BaseRequest { + bool isIgnoreEncoding = false; + /// The size of the request body, in bytes. This is calculated from /// [bodyBytes]. /// @@ -56,7 +58,11 @@ class Request extends BaseRequest { _defaultEncoding = value; var contentType = _contentType; if (contentType == null) return; - _contentType = contentType.change(parameters: {'charset': value.name}); + if (isIgnoreEncoding) { + _contentType = contentType.change(parameters: {}); + } else { + _contentType = contentType.change(parameters: {'charset': value.name}); + } } // TODO(nweiz): make this return a read-only view @@ -85,8 +91,9 @@ class Request extends BaseRequest { bodyBytes = encoding.encode(value); var contentType = _contentType; if (contentType == null) { - _contentType = MediaType("text", "plain", {'charset': encoding.name}); - } else if (!contentType.parameters.containsKey('charset')) { + _contentType = new MediaType("text", "plain", {'charset': encoding.name}); + } else if (!contentType.parameters.containsKey('charset') && + !isIgnoreEncoding) { _contentType = contentType.change(parameters: {'charset': encoding.name}); } }