From 9a7613687b1d667c3ddb20b1a9bebdf3cff9b3a5 Mon Sep 17 00:00:00 2001 From: Open Source Contributor Date: Tue, 5 May 2026 16:55:34 -0600 Subject: [PATCH] Fix JSON Content-Type not set when single header present When a single custom header is passed with JSON body data, the Content-Type header was being overwritten because headers.update() was called after base_headers but after args.headers. The order is now: 1. make_default_headers (sets Content-Type for JSON) 2. headers.update(args.headers) (applies custom headers) 3. base_headers.update() (if provided) This ensures user-provided headers don't incorrectly override the auto-detected JSON Content-Type when body data exists. Fixes issue #1834 --- httpie/client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/httpie/client.py b/httpie/client.py index a1da284a7c..8423a71262 100644 --- a/httpie/client.py +++ b/httpie/client.py @@ -333,17 +333,17 @@ def make_request_kwargs( """ files = args.files - # Serialize JSON data, if needed. data = args.data auto_json = data and not args.form if (args.json or auto_json) and isinstance(data, dict): data = json_dict_to_request_body(data) - # Finalize headers. headers = make_default_headers(args) + + headers.update(args.headers) + if base_headers: headers.update(base_headers) - headers.update(args.headers) if args.offline and args.chunked and 'Transfer-Encoding' not in headers: # When online, we let requests set the header instead to be able more # easily verify chunking is taking place.