1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
from typing import Iterable
from ._proxy_async import AsyncProxy
class ProxyChain:
def __init__(self, proxies: Iterable[AsyncProxy]):
self._proxies = proxies
async def connect(self, dest_host, dest_port, timeout=None):
curr_socket = None
proxies = list(self._proxies)
length = len(proxies) - 1
for i in range(length):
curr_socket = await proxies[i].connect(
dest_host=proxies[i + 1].proxy_host,
dest_port=proxies[i + 1].proxy_port,
timeout=timeout,
_socket=curr_socket
)
curr_socket = await proxies[length].connect(
dest_host=dest_host,
dest_port=dest_port,
timeout=timeout,
_socket=curr_socket
)
return curr_socket
|