Skip to content

Commit

Permalink
Update default proxy construction to include SSL context
Browse files Browse the repository at this point in the history
  • Loading branch information
dherls-pltr authored and DHerls committed Feb 14, 2025
1 parent e70d0b0 commit eca57b3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
13 changes: 11 additions & 2 deletions httpx/_transports/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,15 @@ def map_httpcore_exceptions() -> typing.Iterator[None]:
raise mapped_exc(message) from exc


def create_proxy(proxy: ProxyTypes | None, ssl_context: ssl.SSLContext) -> Proxy | None:
if isinstance(proxy, (str, URL)):
proxy_url = proxy if isinstance(proxy, URL) else URL(proxy)
if proxy_url.scheme == "https":
return Proxy(url=proxy_url, ssl_context=ssl_context)
return Proxy(url=proxy_url)
return proxy


class ResponseStream(SyncByteStream):
def __init__(self, httpcore_stream: typing.Iterable[bytes]) -> None:
self._httpcore_stream = httpcore_stream
Expand Down Expand Up @@ -149,8 +158,8 @@ def __init__(
) -> None:
import httpcore

proxy = Proxy(url=proxy) if isinstance(proxy, (str, URL)) else proxy
ssl_context = create_ssl_context(verify=verify, cert=cert, trust_env=trust_env)
proxy = create_proxy(proxy, ssl_context)

if proxy is None:
self._pool = httpcore.ConnectionPool(
Expand Down Expand Up @@ -293,8 +302,8 @@ def __init__(
) -> None:
import httpcore

proxy = Proxy(url=proxy) if isinstance(proxy, (str, URL)) else proxy
ssl_context = create_ssl_context(verify=verify, cert=cert, trust_env=trust_env)
proxy = create_proxy(proxy, ssl_context)

if proxy is None:
self._pool = httpcore.AsyncConnectionPool(
Expand Down
8 changes: 8 additions & 0 deletions tests/client/test_proxies.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import ssl

import httpcore
import pytest

Expand Down Expand Up @@ -263,3 +265,9 @@ def test_proxy_with_mounts():

transport = client._transport_for_url(httpx.URL("http://example.com"))
assert transport == proxy_transport


def test_proxy_with_ssl_context():
ssl_context = ssl.create_default_context()
proxy_transport = httpx.HTTPTransport(proxy="https://127.0.0.1", verify=ssl_context)
assert proxy_transport._pool._proxy_ssl_context == ssl_context # type: ignore[attr-defined]

0 comments on commit eca57b3

Please # to comment.