Skip to content

Commit 9c25d4f

Browse files
author
rodrigo.nogueira
committed
Improve SSL error message with helpful hints (#3713)
1 parent ae1b9f6 commit 9c25d4f

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

httpx/_transports/default.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ def map_httpcore_exceptions() -> typing.Iterator[None]:
115115
raise
116116

117117
message = str(exc)
118+
if "WRONG_VERSION_NUMBER" in message or "RECORD_LAYER_FAILURE" in message:
119+
message += " (Hint: HTTPS to HTTP server, or stale connection pool)"
118120
raise mapped_exc(message) from exc
119121

120122

tests/test_exceptions.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,26 @@ def test_request_attribute() -> None:
6161
request = httpx.Request("GET", "https://www.example.com")
6262
exc = httpx.ReadTimeout("Read operation timed out", request=request)
6363
assert exc.request == request
64+
65+
66+
def test_ssl_error_message_enhancement() -> None:
67+
"""
68+
SSL handshake failures should include helpful hints about possible causes.
69+
Regression test for: https://github.com/encode/httpx/issues/3713
70+
"""
71+
from httpx._transports.default import map_httpcore_exceptions
72+
73+
ssl_error_messages = [
74+
"[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)",
75+
"[SSL: RECORD_LAYER_FAILURE] record layer failure (_ssl.c:1081)",
76+
]
77+
78+
for original_message in ssl_error_messages:
79+
with pytest.raises(httpx.ConnectError) as exc_info:
80+
with map_httpcore_exceptions():
81+
raise httpcore.ConnectError(original_message)
82+
83+
enhanced_message = str(exc_info.value)
84+
assert original_message in enhanced_message
85+
assert "Hint:" in enhanced_message
86+
assert "stale connection pool" in enhanced_message

0 commit comments

Comments
 (0)