diff --git a/analysis_options.yaml b/analysis_options.yaml
index 164ed9c..6d41948 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -3,5 +3,6 @@
   rules:
   - annotate_overrides
   - prefer_generic_function_type_aliases
+  - prefer_single_quotes
   - unnecessary_const
   - unnecessary_new
diff --git a/example/main.dart b/example/main.dart
index 7b3eaa9..13f996f 100644
--- a/example/main.dart
+++ b/example/main.dart
@@ -4,15 +4,15 @@
 main(List<String> arguments) async {
   // This example uses the Google Books API to search for books about http.
   // https://developers.google.com/books/docs/overview
-  var url = "https://www.googleapis.com/books/v1/volumes?q={http}";
+  var url = 'https://www.googleapis.com/books/v1/volumes?q={http}';
 
   // Await the http get response, then decode the json-formatted response.
   var response = await http.get(url);
   if (response.statusCode == 200) {
     var jsonResponse = convert.jsonDecode(response.body);
     var itemCount = jsonResponse['totalItems'];
-    print("Number of books about http: $itemCount.");
+    print('Number of books about http: $itemCount.');
   } else {
-    print("Request failed with status: ${response.statusCode}.");
+    print('Request failed with status: ${response.statusCode}.');
   }
 }
diff --git a/lib/src/base_client.dart b/lib/src/base_client.dart
index ab31376..3fc7da9 100644
--- a/lib/src/base_client.dart
+++ b/lib/src/base_client.dart
@@ -23,7 +23,7 @@
   /// For more fine-grained control over the request, use [send] instead.
   @override
   Future<Response> head(url, {Map<String, String> headers}) =>
-      _sendUnstreamed("HEAD", url, headers);
+      _sendUnstreamed('HEAD', url, headers);
 
   /// Sends an HTTP GET request with the given headers to the given URL, which
   /// can be a [Uri] or a [String].
@@ -31,7 +31,7 @@
   /// For more fine-grained control over the request, use [send] instead.
   @override
   Future<Response> get(url, {Map<String, String> headers}) =>
-      _sendUnstreamed("GET", url, headers);
+      _sendUnstreamed('GET', url, headers);
 
   /// Sends an HTTP POST request with the given headers and body to the given
   /// URL, which can be a [Uri] or a [String].
@@ -54,7 +54,7 @@
   @override
   Future<Response> post(url,
           {Map<String, String> headers, body, Encoding encoding}) =>
-      _sendUnstreamed("POST", url, headers, body, encoding);
+      _sendUnstreamed('POST', url, headers, body, encoding);
 
   /// Sends an HTTP PUT request with the given headers and body to the given
   /// URL, which can be a [Uri] or a [String].
@@ -77,7 +77,7 @@
   @override
   Future<Response> put(url,
           {Map<String, String> headers, body, Encoding encoding}) =>
-      _sendUnstreamed("PUT", url, headers, body, encoding);
+      _sendUnstreamed('PUT', url, headers, body, encoding);
 
   /// Sends an HTTP PATCH request with the given headers and body to the given
   /// URL, which can be a [Uri] or a [String].
@@ -100,7 +100,7 @@
   @override
   Future<Response> patch(url,
           {Map<String, String> headers, body, Encoding encoding}) =>
-      _sendUnstreamed("PATCH", url, headers, body, encoding);
+      _sendUnstreamed('PATCH', url, headers, body, encoding);
 
   /// Sends an HTTP DELETE request with the given headers to the given URL,
   /// which can be a [Uri] or a [String].
@@ -108,7 +108,7 @@
   /// For more fine-grained control over the request, use [send] instead.
   @override
   Future<Response> delete(url, {Map<String, String> headers}) =>
-      _sendUnstreamed("DELETE", url, headers);
+      _sendUnstreamed('DELETE', url, headers);
 
   /// Sends an HTTP GET request with the given headers to the given URL, which
   /// can be a [Uri] or a [String], and returns a Future that completes to the
@@ -181,12 +181,12 @@
   /// Throws an error if [response] is not successful.
   void _checkResponseSuccess(url, Response response) {
     if (response.statusCode < 400) return;
-    var message = "Request to $url failed with status ${response.statusCode}";
+    var message = 'Request to $url failed with status ${response.statusCode}';
     if (response.reasonPhrase != null) {
-      message = "$message: ${response.reasonPhrase}";
+      message = '$message: ${response.reasonPhrase}';
     }
     if (url is String) url = Uri.parse(url);
-    throw ClientException("$message.", url);
+    throw ClientException('$message.', url);
   }
 
   /// Closes the client and cleans up any resources associated with it. It's
diff --git a/lib/src/base_request.dart b/lib/src/base_request.dart
index 71995aa..4c85588 100644
--- a/lib/src/base_request.dart
+++ b/lib/src/base_request.dart
@@ -34,7 +34,7 @@
 
   set contentLength(int value) {
     if (value != null && value < 0) {
-      throw ArgumentError("Invalid content length $value.");
+      throw ArgumentError('Invalid content length $value.');
     }
     _checkFinalized();
     _contentLength = value;
diff --git a/lib/src/base_response.dart b/lib/src/base_response.dart
index 7c44eea..68e1a73 100644
--- a/lib/src/base_response.dart
+++ b/lib/src/base_response.dart
@@ -44,9 +44,9 @@
       this.persistentConnection = true,
       this.reasonPhrase}) {
     if (statusCode < 100) {
-      throw ArgumentError("Invalid status code $statusCode.");
+      throw ArgumentError('Invalid status code $statusCode.');
     } else if (contentLength != null && contentLength < 0) {
-      throw ArgumentError("Invalid content length $contentLength.");
+      throw ArgumentError('Invalid content length $contentLength.');
     }
   }
 }
diff --git a/lib/src/browser_client.dart b/lib/src/browser_client.dart
index 4891785..b19f13a 100644
--- a/lib/src/browser_client.dart
+++ b/lib/src/browser_client.dart
@@ -80,7 +80,7 @@
       // Unfortunately, the underlying XMLHttpRequest API doesn't expose any
       // specific information about the error itself.
       completer.completeError(
-          ClientException("XMLHttpRequest error.", request.url),
+          ClientException('XMLHttpRequest error.', request.url),
           StackTrace.current);
     }));
 
diff --git a/lib/src/multipart_file.dart b/lib/src/multipart_file.dart
index a3ca7fa..05db4cd 100644
--- a/lib/src/multipart_file.dart
+++ b/lib/src/multipart_file.dart
@@ -49,7 +49,7 @@
       : this._stream = toByteStream(stream),
         this.contentType = contentType != null
             ? contentType
-            : MediaType("application", "octet-stream");
+            : MediaType('application', 'octet-stream');
 
   /// Creates a new [MultipartFile] from a byte array.
   ///
@@ -71,7 +71,7 @@
   factory MultipartFile.fromString(String field, String value,
       {String filename, MediaType contentType}) {
     contentType =
-        contentType == null ? MediaType("text", "plain") : contentType;
+        contentType == null ? MediaType('text', 'plain') : contentType;
     var encoding = encodingForCharset(contentType.parameters['charset'], utf8);
     contentType = contentType.change(parameters: {'charset': encoding.name});
 
diff --git a/lib/src/multipart_request.dart b/lib/src/multipart_request.dart
index 773b9bb..0f15451 100644
--- a/lib/src/multipart_request.dart
+++ b/lib/src/multipart_request.dart
@@ -12,7 +12,7 @@
 import 'multipart_file.dart';
 import 'utils.dart';
 
-final _newlineRegExp = RegExp(r"\r\n|\r|\n");
+final _newlineRegExp = RegExp(r'\r\n|\r|\n');
 
 /// A `multipart/form-data` request.
 ///
@@ -58,30 +58,30 @@
     var length = 0;
 
     fields.forEach((name, value) {
-      length += "--".length +
+      length += '--'.length +
           _boundaryLength +
-          "\r\n".length +
+          '\r\n'.length +
           utf8.encode(_headerForField(name, value)).length +
           utf8.encode(value).length +
-          "\r\n".length;
+          '\r\n'.length;
     });
 
     for (var file in _files) {
-      length += "--".length +
+      length += '--'.length +
           _boundaryLength +
-          "\r\n".length +
+          '\r\n'.length +
           utf8.encode(_headerForFile(file)).length +
           file.length +
-          "\r\n".length;
+          '\r\n'.length;
     }
 
-    return length + "--".length + _boundaryLength + "--\r\n".length;
+    return length + '--'.length + _boundaryLength + '--\r\n'.length;
   }
 
   @override
   set contentLength(int value) {
-    throw UnsupportedError("Cannot set the contentLength property of "
-        "multipart requests.");
+    throw UnsupportedError('Cannot set the contentLength property of '
+        'multipart requests.');
   }
 
   /// Freezes all mutable fields and returns a single-subscription [ByteStream]
@@ -158,17 +158,17 @@
     // follow this at all. Instead, they URL-encode `\r`, `\n`, and `\r\n` as
     // `\r\n`; URL-encode `"`; and do nothing else (even for `%` or non-ASCII
     // characters). We follow their behavior.
-    return value.replaceAll(_newlineRegExp, "%0D%0A").replaceAll('"', "%22");
+    return value.replaceAll(_newlineRegExp, '%0D%0A').replaceAll('"', '%22');
   }
 
   /// Returns a randomly-generated multipart boundary string
   String _boundaryString() {
-    var prefix = "dart-http-boundary-";
+    var prefix = 'dart-http-boundary-';
     var list = List<int>.generate(
         _boundaryLength - prefix.length,
         (index) =>
             BOUNDARY_CHARACTERS[_random.nextInt(BOUNDARY_CHARACTERS.length)],
         growable: false);
-    return "$prefix${String.fromCharCodes(list)}";
+    return '$prefix${String.fromCharCodes(list)}';
   }
 }
diff --git a/lib/src/request.dart b/lib/src/request.dart
index 61262e8..e3cff97 100644
--- a/lib/src/request.dart
+++ b/lib/src/request.dart
@@ -23,8 +23,8 @@
 
   @override
   set contentLength(int value) {
-    throw UnsupportedError("Cannot set the contentLength property of "
-        "non-streaming Request objects.");
+    throw UnsupportedError('Cannot set the contentLength property of '
+        'non-streaming Request objects.');
   }
 
   /// The default encoding to use when converting between [bodyBytes] and
@@ -87,7 +87,7 @@
     bodyBytes = encoding.encode(value);
     var contentType = _contentType;
     if (contentType == null) {
-      _contentType = MediaType("text", "plain", {'charset': encoding.name});
+      _contentType = MediaType('text', 'plain', {'charset': encoding.name});
     } else if (!contentType.parameters.containsKey('charset')) {
       _contentType = contentType.change(parameters: {'charset': encoding.name});
     }
@@ -110,7 +110,7 @@
   Map<String, String> get bodyFields {
     var contentType = _contentType;
     if (contentType == null ||
-        contentType.mimeType != "application/x-www-form-urlencoded") {
+        contentType.mimeType != 'application/x-www-form-urlencoded') {
       throw StateError('Cannot access the body fields of a Request without '
           'content-type "application/x-www-form-urlencoded".');
     }
@@ -121,8 +121,8 @@
   set bodyFields(Map<String, String> fields) {
     var contentType = _contentType;
     if (contentType == null) {
-      _contentType = MediaType("application", "x-www-form-urlencoded");
-    } else if (contentType.mimeType != "application/x-www-form-urlencoded") {
+      _contentType = MediaType('application', 'x-www-form-urlencoded');
+    } else if (contentType.mimeType != 'application/x-www-form-urlencoded') {
       throw StateError('Cannot set the body fields of a Request with '
           'content-type "${contentType.mimeType}".');
     }
diff --git a/lib/src/response.dart b/lib/src/response.dart
index bdc39d1..6d49b8a 100644
--- a/lib/src/response.dart
+++ b/lib/src/response.dart
@@ -82,5 +82,5 @@
 MediaType _contentTypeForHeaders(Map<String, String> headers) {
   var contentType = headers['content-type'];
   if (contentType != null) return MediaType.parse(contentType);
-  return MediaType("application", "octet-stream");
+  return MediaType('application', 'octet-stream');
 }
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 164c1e5..67aabe0 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -18,7 +18,7 @@
         Uri.encodeQueryComponent(key, encoding: encoding),
         Uri.encodeQueryComponent(value, encoding: encoding)
       ]));
-  return pairs.map((pair) => "${pair[0]}=${pair[1]}").join("&");
+  return pairs.map((pair) => '${pair[0]}=${pair[1]}').join('&');
 }
 
 /// Like [String.split], but only splits on the first occurrence of the pattern.
@@ -58,7 +58,7 @@
 
 /// A regular expression that matches strings that are composed entirely of
 /// ASCII-compatible characters.
-final RegExp _ASCII_ONLY = RegExp(r"^[\x00-\x7F]+$");
+final RegExp _ASCII_ONLY = RegExp(r'^[\x00-\x7F]+$');
 
 /// Returns whether [string] is composed entirely of ASCII-compatible
 /// characters.
diff --git a/test/html/client_test.dart b/test/html/client_test.dart
index 8fe1c72..cd55d1d 100644
--- a/test/html/client_test.dart
+++ b/test/html/client_test.dart
@@ -13,7 +13,7 @@
 void main() {
   test('#send a StreamedRequest', () {
     var client = BrowserClient();
-    var request = http.StreamedRequest("POST", echoUrl);
+    var request = http.StreamedRequest('POST', echoUrl);
 
     expect(
         client.send(request).then((response) {
@@ -28,10 +28,10 @@
   test('#send with an invalid URL', () {
     var client = BrowserClient();
     var url = Uri.parse('http://http.invalid');
-    var request = http.StreamedRequest("POST", url);
+    var request = http.StreamedRequest('POST', url);
 
     expect(
-        client.send(request), throwsClientException("XMLHttpRequest error."));
+        client.send(request), throwsClientException('XMLHttpRequest error.'));
 
     request.sink.add('{"hello": "world"}'.codeUnits);
     request.sink.close();
diff --git a/test/io/client_test.dart b/test/io/client_test.dart
index 0301445..a77a026 100644
--- a/test/io/client_test.dart
+++ b/test/io/client_test.dart
@@ -19,7 +19,7 @@
     expect(
         startServer().then((_) {
           var client = http.Client();
-          var request = http.StreamedRequest("POST", serverUrl);
+          var request = http.StreamedRequest('POST', serverUrl);
           request.headers[HttpHeaders.contentTypeHeader] =
               'application/json; charset=utf-8';
           request.headers[HttpHeaders.userAgentHeader] = 'Dart';
@@ -58,7 +58,7 @@
         startServer().then((_) {
           var ioClient = HttpClient();
           var client = http_io.IOClient(ioClient);
-          var request = http.StreamedRequest("POST", serverUrl);
+          var request = http.StreamedRequest('POST', serverUrl);
           request.headers[HttpHeaders.contentTypeHeader] =
               'application/json; charset=utf-8';
           request.headers[HttpHeaders.userAgentHeader] = 'Dart';
@@ -97,7 +97,7 @@
         startServer().then((_) {
           var client = http.Client();
           var url = Uri.parse('http://http.invalid');
-          var request = http.StreamedRequest("POST", url);
+          var request = http.StreamedRequest('POST', url);
           request.headers[HttpHeaders.contentTypeHeader] =
               'application/json; charset=utf-8';
 
diff --git a/test/io/request_test.dart b/test/io/request_test.dart
index bdae677..bc980e3 100644
--- a/test/io/request_test.dart
+++ b/test/io/request_test.dart
@@ -14,7 +14,7 @@
     expect(
         startServer().then((_) {
           var request = http.Request('POST', serverUrl);
-          request.body = "hello";
+          request.body = 'hello';
           request.headers['User-Agent'] = 'Dart';
 
           expect(
diff --git a/test/io/utils.dart b/test/io/utils.dart
index 50e668b..f30ebf2 100644
--- a/test/io/utils.dart
+++ b/test/io/utils.dart
@@ -20,7 +20,7 @@
 
 /// Starts a new HTTP server.
 Future startServer() {
-  return HttpServer.bind("localhost", 0).then((s) {
+  return HttpServer.bind('localhost', 0).then((s) {
     _server = s;
     s.listen((request) {
       var path = request.uri.path;
@@ -69,7 +69,7 @@
         }
 
         response.headers.contentType =
-            ContentType("application", "json", charset: outputEncoding.name);
+            ContentType('application', 'json', charset: outputEncoding.name);
         response.headers.set('single', 'value');
 
         var requestBody;
diff --git a/test/mock_client_test.dart b/test/mock_client_test.dart
index acd1007..3ec5ab0 100644
--- a/test/mock_client_test.dart
+++ b/test/mock_client_test.dart
@@ -19,7 +19,7 @@
     });
 
     expect(
-        client.post("http://example.com/foo", body: {
+        client.post('http://example.com/foo', body: {
           'field1': 'value1',
           'field2': 'value2'
         }).then((response) => response.body),
@@ -39,9 +39,9 @@
       });
     });
 
-    var uri = Uri.parse("http://example.com/foo");
-    var request = http.Request("POST", uri);
-    request.body = "hello, world";
+    var uri = Uri.parse('http://example.com/foo');
+    var request = http.Request('POST', uri);
+    request.body = 'hello, world';
     var future = client
         .send(request)
         .then(http.Response.fromStream)
@@ -54,7 +54,7 @@
       return Future.value(http.Response('you did it', 200));
     });
 
-    expect(client.read("http://example.com/foo"),
+    expect(client.read('http://example.com/foo'),
         completion(equals('you did it')));
   });
 }
diff --git a/test/multipart_test.dart b/test/multipart_test.dart
index 8b14197..e125932 100644
--- a/test/multipart_test.dart
+++ b/test/multipart_test.dart
@@ -30,9 +30,9 @@
     var request = http.MultipartRequest('POST', dummyUrl);
     request.fields['field1'] = 'value1';
     request.fields['field2'] = 'value2';
-    request.files.add(http.MultipartFile.fromString("file1", "contents1",
-        filename: "filename1.txt"));
-    request.files.add(http.MultipartFile.fromString("file2", "contents2"));
+    request.files.add(http.MultipartFile.fromString('file1', 'contents1',
+        filename: 'filename1.txt'));
+    request.files.add(http.MultipartFile.fromString('file2', 'contents2'));
 
     expect(request, bodyMatches('''
         --{{boundary}}
diff --git a/test/request_test.dart b/test/request_test.dart
index fecb983..8e19eb3 100644
--- a/test/request_test.dart
+++ b/test/request_test.dart
@@ -21,9 +21,9 @@
 
     test('is computed from body', () {
       var request = http.Request('POST', dummyUrl);
-      request.body = "hello";
+      request.body = 'hello';
       expect(request.contentLength, equals(5));
-      request.body = "hello, world";
+      request.body = 'hello, world';
       expect(request.contentLength, equals(12));
     });
 
@@ -84,7 +84,7 @@
 
     test('changes when body changes', () {
       var request = http.Request('POST', dummyUrl);
-      request.body = "hello";
+      request.body = 'hello';
       expect(request.bodyBytes, equals([104, 101, 108, 108, 111]));
     });
   });
@@ -97,20 +97,20 @@
 
     test('can be set', () {
       var request = http.Request('POST', dummyUrl);
-      request.body = "hello";
-      expect(request.body, equals("hello"));
+      request.body = 'hello';
+      expect(request.body, equals('hello'));
     });
 
     test('changes when bodyBytes changes', () {
       var request = http.Request('POST', dummyUrl);
       request.bodyBytes = [104, 101, 108, 108, 111];
-      expect(request.body, equals("hello"));
+      expect(request.body, equals('hello'));
     });
 
     test('is encoded according to the given encoding', () {
       var request = http.Request('POST', dummyUrl);
       request.encoding = latin1;
-      request.body = "föøbãr";
+      request.body = 'föøbãr';
       expect(request.bodyBytes, equals([102, 246, 248, 98, 227, 114]));
     });
 
@@ -118,7 +118,7 @@
       var request = http.Request('POST', dummyUrl);
       request.encoding = latin1;
       request.bodyBytes = [102, 246, 248, 98, 227, 114];
-      expect(request.body, equals("föøbãr"));
+      expect(request.body, equals('föøbãr'));
     });
   });
 
@@ -164,7 +164,7 @@
       var request = http.Request('POST', dummyUrl);
       request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
       request.encoding = latin1;
-      request.bodyFields = {"föø": "bãr"};
+      request.bodyFields = {'föø': 'bãr'};
       expect(request.body, equals('f%F6%F8=b%E3r'));
     });
 
@@ -173,7 +173,7 @@
       request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
       request.encoding = latin1;
       request.body = 'f%F6%F8=b%E3r';
-      expect(request.bodyFields, equals({"föø": "bãr"}));
+      expect(request.bodyFields, equals({'föø': 'bãr'}));
     });
   });
 
@@ -269,9 +269,9 @@
   group('#finalize', () {
     test('returns a stream that emits the request body', () {
       var request = http.Request('POST', dummyUrl);
-      request.body = "Hello, world!";
+      request.body = 'Hello, world!';
       expect(request.finalize().bytesToString(),
-          completion(equals("Hello, world!")));
+          completion(equals('Hello, world!')));
     });
 
     test('freezes #persistentConnection', () {
@@ -317,19 +317,19 @@
 
     test('freezes #body', () {
       var request = http.Request('POST', dummyUrl);
-      request.body = "hello";
+      request.body = 'hello';
       request.finalize();
 
-      expect(request.body, equals("hello"));
-      expect(() => request.body = "goodbye", throwsStateError);
+      expect(request.body, equals('hello'));
+      expect(() => request.body = 'goodbye', throwsStateError);
     });
 
     test('freezes #bodyFields', () {
       var request = http.Request('POST', dummyUrl);
-      request.bodyFields = {"hello": "world"};
+      request.bodyFields = {'hello': 'world'};
       request.finalize();
 
-      expect(request.bodyFields, equals({"hello": "world"}));
+      expect(request.bodyFields, equals({'hello': 'world'}));
       expect(() => request.bodyFields = {}, throwsStateError);
     });
 
diff --git a/test/response_test.dart b/test/response_test.dart
index 110e5ec..69a8b95 100644
--- a/test/response_test.dart
+++ b/test/response_test.dart
@@ -10,12 +10,12 @@
 void main() {
   group('()', () {
     test('sets body', () {
-      var response = http.Response("Hello, world!", 200);
-      expect(response.body, equals("Hello, world!"));
+      var response = http.Response('Hello, world!', 200);
+      expect(response.body, equals('Hello, world!'));
     });
 
     test('sets bodyBytes', () {
-      var response = http.Response("Hello, world!", 200);
+      var response = http.Response('Hello, world!', 200);
       expect(
           response.bodyBytes,
           equals(
@@ -23,7 +23,7 @@
     });
 
     test('respects the inferred encoding', () {
-      var response = http.Response("föøbãr", 200,
+      var response = http.Response('föøbãr', 200,
           headers: {'content-type': 'text/plain; charset=iso-8859-1'});
       expect(response.bodyBytes, equals([102, 246, 248, 98, 227, 114]));
     });
@@ -32,7 +32,7 @@
   group('.bytes()', () {
     test('sets body', () {
       var response = http.Response.bytes([104, 101, 108, 108, 111], 200);
-      expect(response.body, equals("hello"));
+      expect(response.body, equals('hello'));
     });
 
     test('sets bodyBytes', () {
@@ -43,7 +43,7 @@
     test('respects the inferred encoding', () {
       var response = http.Response.bytes([102, 246, 248, 98, 227, 114], 200,
           headers: {'content-type': 'text/plain; charset=iso-8859-1'});
-      expect(response.body, equals("föøbãr"));
+      expect(response.body, equals('föøbãr'));
     });
   });
 
@@ -54,7 +54,7 @@
           http.StreamedResponse(controller.stream, 200, contentLength: 13);
       var future = http.Response.fromStream(streamResponse)
           .then((response) => response.body);
-      expect(future, completion(equals("Hello, world!")));
+      expect(future, completion(equals('Hello, world!')));
 
       controller.add([72, 101, 108, 108, 111, 44, 32]);
       controller.add([119, 111, 114, 108, 100, 33]);
diff --git a/test/utils.dart b/test/utils.dart
index 995a1bb..97a66d8 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -89,8 +89,8 @@
       var contentType = MediaType.parse(item.headers['content-type']);
       var boundary = contentType.parameters['boundary'];
       var expected = cleanUpLiteral(_pattern)
-          .replaceAll("\n", "\r\n")
-          .replaceAll("{{boundary}}", boundary);
+          .replaceAll('\n', '\r\n')
+          .replaceAll('{{boundary}}', boundary);
 
       expect(body, equals(expected));
       expect(item.contentLength, equals(bodyBytes.length));
