Skip to content

Commit fd1f0e2

Browse files
committed
Update default proxy construction to include SSL context
1 parent e70d0b0 commit fd1f0e2

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

httpx/_transports/default.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,15 @@ def map_httpcore_exceptions() -> typing.Iterator[None]:
118118
raise mapped_exc(message) from exc
119119

120120

121+
def create_proxy(proxy: ProxyTypes | None, ssl_context: ssl.SSLContext) -> Proxy | None:
122+
if isinstance(proxy, (str, URL)):
123+
proxy_url = proxy if isinstance(proxy, URL) else URL(proxy)
124+
if proxy_url.scheme == "https":
125+
return Proxy(url=proxy_url, ssl_context=ssl_context)
126+
return Proxy(url=proxy_url)
127+
return proxy
128+
129+
121130
class ResponseStream(SyncByteStream):
122131
def __init__(self, httpcore_stream: typing.Iterable[bytes]) -> None:
123132
self._httpcore_stream = httpcore_stream
@@ -149,8 +158,8 @@ def __init__(
149158
) -> None:
150159
import httpcore
151160

152-
proxy = Proxy(url=proxy) if isinstance(proxy, (str, URL)) else proxy
153161
ssl_context = create_ssl_context(verify=verify, cert=cert, trust_env=trust_env)
162+
proxy = create_proxy(proxy, ssl_context)
154163

155164
if proxy is None:
156165
self._pool = httpcore.ConnectionPool(
@@ -293,8 +302,8 @@ def __init__(
293302
) -> None:
294303
import httpcore
295304

296-
proxy = Proxy(url=proxy) if isinstance(proxy, (str, URL)) else proxy
297305
ssl_context = create_ssl_context(verify=verify, cert=cert, trust_env=trust_env)
306+
proxy = create_proxy(proxy, ssl_context)
298307

299308
if proxy is None:
300309
self._pool = httpcore.AsyncConnectionPool(

tests/client/test_proxies.py

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import ssl
2+
13
import httpcore
24
import pytest
35

@@ -263,3 +265,9 @@ def test_proxy_with_mounts():
263265

264266
transport = client._transport_for_url(httpx.URL("http://example.com"))
265267
assert transport == proxy_transport
268+
269+
270+
def test_proxy_with_ssl_context():
271+
ssl_context = ssl.create_default_context()
272+
proxy_transport = httpx.HTTPTransport(proxy="https://127.0.0.1", verify=ssl_context)
273+
assert proxy_transport._pool._proxy_ssl_context == ssl_context # type: ignore[attr-defined]

0 commit comments

Comments
 (0)