8000 GitHub - romis2012/aiohttp-socks: Proxy (HTTP, SOCKS) connector for aiohttp
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

romis2012/aiohttp-socks

Repository files navigation

aiohttp-socks

CI Coverage Status PyPI version

The aiohttp-socks package provides a proxy connector for aiohttp. Supports SOCKS4(a), SOCKS5(h), HTTP (CONNECT) as well as Proxy chains. It uses python-socks for core proxy functionality.

Requirements

  • Python >= 3.8
  • aiohttp >= 3.10.0
  • python-socks[asyncio] >= 2.4.3

Installation

pip install aiohttp_socks

Usage

Simple usage

import aiohttp
from aiohttp_socks import ProxyType, ProxyConnector, ChainProxyConnector


async def fetch(url):
    connector = ProxyConnector.from_url('socks5://user:password@127.0.0.1:1080')
    
    ### or use ProxyConnector constructor
    # connector = ProxyConnector(
    #     proxy_type=ProxyType.SOCKS5,
    #     host='127.0.0.1',
    #     port=1080,
    #     username='user',
    #     password='password',
    #     rdns=True # default is True for socks5
    # )
    
    ### proxy chaining (since ver 0.3.3)
    # connector = ChainProxyConnector.from_urls([
    #     'socks5://user:password@127.0.0.1:1080',
    #     'socks4://127.0.0.1:1081',
    #     'http://user:password@127.0.0.1:3128',
    # ])
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get(url) as response:
            return await response.text()

Exception handling recommendations

Since the latest versions of aiohttp do not respect exceptions raised in the custom TCPConnector (see issue #52), the following pattern can be used to handle ProxyConnectionError and ProxyTimeoutError exceptions

from aiohttp_socks import (
    ProxyConnectionError,
    ProxyTimeoutError,
)

def is_proxy_connection_error(e: Exception):
    return isinstance(e, ProxyConnectionError) or isinstance(
        e.__cause__, ProxyConnectionError
    )


def is_proxy_timeout_error(e: Exception):
    return isinstance(e, ProxyTimeoutError) or isinstance(
        e.__cause__, ProxyTimeoutError
    )


try:
    await fetch(...)
except Exception as e:
    if is_proxy_connection_error(e):
        ...do something  useful...

Why yet another SOCKS connector for aiohttp

Unlike aiosocksy, aiohttp_socks has only single point of integration with aiohttp. This makes it easier to maintain compatibility with new aiohttp versions.

About

Proxy (HTTP, SOCKS) connector for aiohttp

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7

Languages

0