From 39db1717215dcbdf144b312a814d9f07dbc6f771 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Wed, 17 Dec 2025 12:52:50 +0000 Subject: [PATCH 1/3] Enhance test coverage for httpx requests Add tests for invalid request schemes and missing host. --- tests/test_request.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_request.py b/tests/test_request.py index a69e1d1358..cab0a5e109 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -1,4 +1,5 @@ import httpx +import pytest class ByteIterator: @@ -77,3 +78,13 @@ def test_request_empty_post(): "Content-Length": "0", } assert r.read() == b'' + + +def test_request_invalid_scheme(): + with pytest.raises(ValueError): + httpx.Request("GET", "ws://example.com") + + +def test_request_missing_host(): + with pytest.raises(ValueError): + r = httpx.Request("GET", "https:/example.com") From 1068c67f5a102f7ba119e5e41418f1451506980d Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Wed, 17 Dec 2025 13:57:27 +0000 Subject: [PATCH 2/3] Validate URL scheme and host in request Add validation for URL scheme and netloc in request --- src/ahttpx/_request.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ahttpx/_request.py b/src/ahttpx/_request.py index 78b82282d0..a247b8b458 100644 --- a/src/ahttpx/_request.py +++ b/src/ahttpx/_request.py @@ -29,6 +29,11 @@ def __init__( if "Host" not in self.headers: self.headers = self.headers.copy_set("Host", self.url.netloc) + if self.url.scheme not in ('http', 'https'): + raise ValueError(f'Invalid scheme for URL {str(self.url)!r}.') + if not self.url.netloc: + raise ValueError(f'Missing host for URL {str(self.url)!r}.') + if content is not None: if isinstance(content, bytes): self.stream = ByteStream(content) From 6b99aaed1194812edf11f5d265f0d761fd2274c5 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Wed, 17 Dec 2025 13:57:56 +0000 Subject: [PATCH 3/3] Validate URL scheme and ensure host presence Add validation for URL scheme and netloc in requests. --- src/httpx/_request.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/httpx/_request.py b/src/httpx/_request.py index 1b739b1872..03c78dfea2 100644 --- a/src/httpx/_request.py +++ b/src/httpx/_request.py @@ -28,6 +28,11 @@ def __init__( # A client MUST include a Host header field in all HTTP/1.1 request messages. if "Host" not in self.headers: self.headers = self.headers.copy_set("Host", self.url.netloc) + + if self.url.scheme not in ('http', 'https'): + raise ValueError(f'Invalid scheme for URL {str(self.url)!r}.') + if not self.url.netloc: + raise ValueError(f'Missing host for URL {str(self.url)!r}.') if content is not None: if isinstance(content, bytes):