The httpx-socks package provides proxy transports for httpx client.
SOCKS4(a), SOCKS5(h), HTTP CONNECT proxy supported.
It uses python-socks for core proxy functionality.
Requirements
- Python >= 3.9
- httpx>=0.28.0,<0.29.0
- python-socks>=2.4.3,<3.0.0
- trio>=0.30 (optional)
- anyio>=4.12,<5.0.0 (optional)
Installation
only sync proxy support:
pip install httpx-socks
to include optional asyncio support (it requires async-timeout):
pip install httpx-socks[asyncio]
to include optional trio support:
pip install httpx-socks[trio]
Usage
sync transport
import httpx from httpx_socks import SyncProxyTransport def fetch(url): transport = SyncProxyTransport.from_url('socks5://user:password@127.0.0.1:1080') with httpx.Client(transport=transport) as client: res = client.get(url) return res.text
async transport (asyncio, trio)
import httpx from httpx_socks import AsyncProxyTransport async def fetch(url): transport = AsyncProxyTransport.from_url('socks5://user:password@127.0.0.1:1080') async with httpx.AsyncClient(transport=transport) as client: res = await client.get(url) return res.text
secure proxy connections (experimental feature, both sync and async support)
import ssl import httpx from httpx_socks import AsyncProxyTransport async def fetch(url): proxy_ssl = ssl.create_default_context() proxy_ssl.load_verify_locations(...) transport = AsyncProxyTransport.from_url('http://user:password@127.0.0.1:8080', proxy_ssl=proxy_ssl) async with httpx.AsyncClient(transport=transport) as client: res = await client.get(url) return res.text