httpx-socks

SOCKS4, SOCKS5, and HTTP CONNECT proxy transports for the httpx client.

Library
PyPI
v0.13.1
87 stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
56 /100 Fair
Development Activity 44
Maintenance 64
Community 36
Maturity 60
Momentum 20

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
69 /100 Good
Architecture 74
Code Quality 75
Innovation 55
Learning Curve 72

httpx-socks provides custom transport classes that let httpx route requests through SOCKS4(a), SOCKS5(h), or HTTP CONNECT proxies. It builds on python-socks (from the same author) for the actual proxy handshake and connection logic, so httpx itself doesn’t need native proxy protocol support.

The package ships separate sync and async transport classes, with optional asyncio and trio backends, so it fits both blocking scripts and async applications using httpx’s Client/AsyncClient interfaces without changing how requests are made.

What You Get

  • SyncProxyTransport and AsyncProxyTransport classes that plug directly into httpx.Client/AsyncClient
  • Support for SOCKS4(a), SOCKS5(h), and HTTP CONNECT proxy protocols
  • Optional asyncio and trio backends via extras (httpx-socks[asyncio], httpx-socks[trio])
  • Proxy handshake logic delegated to python-socks, keeping the transport layer thin
  • A from_url() constructor that parses standard proxy URLs (socks5://user:pass@host:port)

Common Use Cases

  • Routing httpx requests through a SOCKS5 proxy for scraping or automation behind a residential/rotating proxy pool
  • Adding HTTP CONNECT or SOCKS4 proxy support to an existing httpx-based API client
  • Using proxies in async services built on asyncio or trio without swapping HTTP clients
  • Testing or accessing geo-restricted APIs through a SOCKS proxy in Python scripts

Under The Hood

Architecture: the package is split into sync and async transport modules — _sync_transport.py/_sync_proxy.py implement httpx.BaseTransport, while _async_transport.py/_async_proxy.py implement httpx.AsyncBaseTransport; both delegate the actual SOCKS/CONNECT handshake to the separate python-socks package and wrap the resulting raw socket into an httpx-compatible stream (_sync_stream.py). Tech Stack: pure Python (>=3.8), depends on httpx>=0.28,<0.29 and python-socks>=2.4.3,<3.0, with optional trio and anyio extras for alternate async backends. Code Quality: the tests/ directory covers sync, asyncio, and trio transports separately (test_transport_sync.py, test_transport_asyncio.py, test_transport_trio.py) against a local mock proxy server (proxy_server.py, http_server.py), with CI and Codecov badges indicating enforced coverage. API Design: the API mirrors httpx’s own transport pattern — construct a transport with from_url() and pass it to httpx.Client(transport=...) — so adopting a proxy requires no changes to how requests are made elsewhere in the codebase.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers