102 lines
2.9 KiB
Plaintext
102 lines
2.9 KiB
Plaintext
Metadata-Version: 2.1
|
|
Name: httpx-socks
|
|
Version: 0.9.2
|
|
Summary: Proxy (HTTP, SOCKS) transports for httpx
|
|
Home-page: https://github.com/romis2012/httpx-socks
|
|
Author: Roman Snegirev
|
|
Author-email: snegiryev@gmail.com
|
|
License: Apache 2
|
|
Keywords: httpx asyncio socks socks5 socks4 http proxy
|
|
Description-Content-Type: text/markdown
|
|
License-File: LICENSE.txt
|
|
Requires-Dist: httpx<0.28.0,>=0.21.0
|
|
Requires-Dist: httpcore<2.0,>=0.17.3
|
|
Requires-Dist: python-socks>=2.0.0
|
|
Provides-Extra: asyncio
|
|
Requires-Dist: async-timeout>=3.0.1; extra == "asyncio"
|
|
Provides-Extra: trio
|
|
Requires-Dist: trio>=0.16.0; extra == "trio"
|
|
|
|
# httpx-socks
|
|
|
|
[](https://github.com/romis2012/httpx-socks/actions/workflows/ci.yml)
|
|
[](https://codecov.io/gh/romis2012/httpx-socks)
|
|
[](https://pypi.python.org/pypi/httpx-socks)
|
|
<!--
|
|
[](https://pepy.tech/project/httpx-socks)
|
|
-->
|
|
|
|
The `httpx-socks` package provides proxy transports for [httpx](https://github.com/encode/httpx) client.
|
|
SOCKS4(a), SOCKS5(h), HTTP (tunneling) proxy supported.
|
|
It uses [python-socks](https://github.com/romis2012/python-socks) for core proxy functionality.
|
|
|
|
|
|
## Requirements
|
|
- Python >= 3.6
|
|
- httpx>=0.21.0
|
|
- python-socks>=2.0.0
|
|
- async-timeout>=3.0.1 (optional)
|
|
- trio>=0.16.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
|
|
```python
|
|
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)
|
|
```python
|
|
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 (aka "HTTPS proxies", experimental feature, both sync and async support)
|
|
```python
|
|
import ssl
|
|
import httpx
|
|
from httpx_socks import AsyncProxyTransport
|
|
|
|
async def fetch(url):
|
|
proxy_ssl = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
|
proxy_ssl.verify_mode = ssl.CERT_REQUIRED
|
|
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
|
|
```
|