File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments