From 2ada9744c4914a843bef9954a06804c5b0e63cd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klemen=20Tu=C5=A1ar?= Date: Fri, 6 Oct 2023 21:35:06 +0100 Subject: [PATCH 1/4] :bug: remove charset from http request headers when the body is in bytes --- chopper/lib/src/request.dart | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/chopper/lib/src/request.dart b/chopper/lib/src/request.dart index 1441ef3d..0f134f7d 100644 --- a/chopper/lib/src/request.dart +++ b/chopper/lib/src/request.dart @@ -138,16 +138,23 @@ base class Request extends http.BaseRequest with EquatableMixin { @visibleForTesting http.Request toHttpRequest() { final http.Request request = http.Request(method, url) - ..followRedirects = followRedirects - ..headers.addAll(headers); + ..followRedirects = followRedirects; - if (body != null) { + if (body == null) { + request.headers.addAll(headers); + } else { if (body is String) { - request.body = body; + request + ..headers.addAll(headers) + ..body = body; } else if (body is List) { - request.bodyBytes = body; + request + ..bodyBytes = body + ..headers.addAll(headers); } else if (body is Map) { - request.bodyFields = body; + request + ..headers.addAll(headers) + ..bodyFields = body; } else { throw ArgumentError.value('$body', 'body'); } From 11099bdb885574bed2a7dc5237ca9ea93dfdd9c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klemen=20Tu=C5=A1ar?= Date: Sat, 7 Oct 2023 08:26:47 +0100 Subject: [PATCH 2/4] :white_check_mark: add BodyBytes does not have charset header test --- chopper/test/base_test.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/chopper/test/base_test.dart b/chopper/test/base_test.dart index dee04012..6ea94e31 100644 --- a/chopper/test/base_test.dart +++ b/chopper/test/base_test.dart @@ -7,6 +7,7 @@ import 'package:chopper/chopper.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:test/test.dart'; +import 'package:transparent_image/transparent_image.dart'; import 'test_service.dart'; import 'test_service_variable.dart'; @@ -763,6 +764,18 @@ void main() { expect(request.bodyBytes, equals([1, 2, 3])); }); + test('BodyBytes does not have charset header', () { + final request = Request( + HttpMethod.Post, + Uri.parse('https://foo/'), + Uri.parse(''), + body: kTransparentImage, + ).toHttpRequest(); + + expect(request.headers['content-type'], isNot(contains('charset='))); + expect(request.bodyBytes, equals(kTransparentImage)); + }); + test('BodyFields', () { final request = Request( HttpMethod.Post, From 9d2b9b6ce4cfcbf678358a15fec8da8bc97215ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klemen=20Tu=C5=A1ar?= Date: Sat, 7 Oct 2023 08:29:29 +0100 Subject: [PATCH 3/4] :white_check_mark: add BodyBytes does not have charset header test --- chopper/test/base_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/chopper/test/base_test.dart b/chopper/test/base_test.dart index 6ea94e31..a4f97780 100644 --- a/chopper/test/base_test.dart +++ b/chopper/test/base_test.dart @@ -772,6 +772,7 @@ void main() { body: kTransparentImage, ).toHttpRequest(); + expect(request.headers['content-type'], isNull); expect(request.headers['content-type'], isNot(contains('charset='))); expect(request.bodyBytes, equals(kTransparentImage)); }); From e5b175d2c1687a0951dc04495dec061c58fdc818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klemen=20Tu=C5=A1ar?= Date: Sat, 7 Oct 2023 08:34:49 +0100 Subject: [PATCH 4/4] :white_check_mark: add BodyBytes does not have charset header test --- chopper/test/base_test.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/chopper/test/base_test.dart b/chopper/test/base_test.dart index a4f97780..f1e76dad 100644 --- a/chopper/test/base_test.dart +++ b/chopper/test/base_test.dart @@ -769,9 +769,15 @@ void main() { HttpMethod.Post, Uri.parse('https://foo/'), Uri.parse(''), + headers: { + 'authorization': 'Bearer fooBarBaz', + 'x-foo': 'bar', + }, body: kTransparentImage, ).toHttpRequest(); + expect(request.headers['authorization'], equals('Bearer fooBarBaz')); + expect(request.headers['x-foo'], equals('bar')); expect(request.headers['content-type'], isNull); expect(request.headers['content-type'], isNot(contains('charset='))); expect(request.bodyBytes, equals(kTransparentImage));