103 lines
2.5 KiB
Python
103 lines
2.5 KiB
Python
import asyncio
|
|
import warnings
|
|
|
|
from python_socks import ProxyType, parse_proxy_url
|
|
from python_socks.async_.asyncio import Proxy
|
|
|
|
|
|
async def open_connection(
|
|
proxy_url=None,
|
|
host=None,
|
|
port=None,
|
|
*,
|
|
proxy_type=ProxyType.SOCKS5,
|
|
proxy_host='127.0.0.1',
|
|
proxy_port=1080,
|
|
username=None,
|
|
password=None,
|
|
rdns=True,
|
|
loop=None,
|
|
**kwargs,
|
|
):
|
|
warnings.warn(
|
|
'open_connection is deprecated. '
|
|
'Use https://github.com/romis2012/python-socks directly instead.',
|
|
DeprecationWarning,
|
|
stacklevel=2,
|
|
)
|
|
|
|
if host is None or port is None:
|
|
raise ValueError('host and port must be specified') # pragma: no cover
|
|
|
|
if loop is None:
|
|
loop = asyncio.get_event_loop()
|
|
|
|
if proxy_url is not None:
|
|
proxy_type, proxy_host, proxy_port, username, password = parse_proxy_url(proxy_url)
|
|
|
|
proxy = Proxy.create(
|
|
proxy_type=proxy_type,
|
|
host=proxy_host,
|
|
port=proxy_port,
|
|
username=username,
|
|
password=password,
|
|
rdns=rdns,
|
|
loop=loop,
|
|
)
|
|
|
|
sock = await proxy.connect(host, port)
|
|
|
|
# noinspection PyTypeChecker
|
|
return await asyncio.open_connection(host=None, port=None, sock=sock, **kwargs)
|
|
|
|
|
|
async def create_connection(
|
|
proxy_url=None,
|
|
protocol_factory=None,
|
|
host=None,
|
|
port=None,
|
|
*,
|
|
proxy_type=ProxyType.SOCKS5,
|
|
proxy_host='127.0.0.1',
|
|
proxy_port=1080,
|
|
username=None,
|
|
password=None,
|
|
rdns=True,
|
|
loop=None,
|
|
**kwargs,
|
|
):
|
|
warnings.warn(
|
|
'create_connection is deprecated. '
|
|
'Use https://github.com/romis2012/python-socks directly instead.',
|
|
DeprecationWarning,
|
|
stacklevel=2,
|
|
)
|
|
|
|
if protocol_factory is None:
|
|
raise ValueError('protocol_factory must be specified') # pragma: no cover
|
|
|
|
if host is None or port is None:
|
|
raise ValueError('host and port must be specified') # pragma: no cover
|
|
|
|
if loop is None:
|
|
loop = asyncio.get_event_loop()
|
|
|
|
if proxy_url is not None:
|
|
proxy_type, proxy_host, proxy_port, username, password = parse_proxy_url(proxy_url)
|
|
|
|
proxy = Proxy.create(
|
|
proxy_type=proxy_type,
|
|
host=proxy_host,
|
|
port=proxy_port,
|
|
username=username,
|
|
password=password,
|
|
rdns=rdns,
|
|
loop=loop,
|
|
)
|
|
|
|
sock = await proxy.connect(host, port)
|
|
|
|
return await loop.create_connection(
|
|
protocol_factory=protocol_factory, host=None, port=None, sock=sock, **kwargs
|
|
)
|