GitHub

CI Coverage Status PyPI version versions

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

Read the original on github.com ↗