Использование прокси в aiohttp
Друзья, возник вопрос.
Использую документацию , хочу отправлять запросы с разных адресов.
Получился следующий код
import asyncio
import aiohttp
sites = [
'https://ifconfig.me/ip',
'https://ifconfig.me/ip',
'https://ifconfig.me/ip',
]
proxys = [
'https://proxy:port',
'https://proxy:port',
'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
# 'https://proxy:port',
]
async def fetch(session, url):
proxy_auth = aiohttp.BasicAuth('login', 'password')
async with session.get(url[0], timeout=3, proxy=url[1], proxy_auth=proxy_auth) as resp:
print(resp)
if resp.ok:
result = await resp.read()
print(result)
else:
print("\n!MISSED!\n")
async def func():
async with aiohttp.ClientSession(trust_env=True) as session:
x = list(zip(sites, proxys))
html_links = [fetch(session, url) for url in x]
return await asyncio.gather(*html_links)
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(func())
Получаю в ответ
raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError
Почитав в интернете понял что проблема может быть из-за того что нет поддержки https прокси. Мои прокси именно такие, но разве https не предполагает наличие http, подумал я - и стер все s-ки из proxys. В ответ получил raise ClientHttpProxyError( aiohttp.client_exceptions.ClientHttpProxyError: 502, message='Bad Gateway', url=URL('http://proxy:port')
https://github.com/aio-libs/aiohttp/discussions/6044#discussioncomment-1432443
Но и предоставленное решение не смогло меня удовлетворить.
Что я понял? Либо моих умений искать информацию недостаточно, либо я где-то в корне налажал/не понял/не разобрался.
Что я хочу? Хочу чтобы разработчики, которые сталкивались с такой же проблемой или же разработчики, решившие мою задачу другим способом, поделились своим опытом/натолкнули на мысль.
Требования для решения моей задачи. Я видел что обычные requests вроде как умеют стучаться на https сайт по https прокси, но у меня будет много запросов и очень ценно время за которое программа их выполнит, именно поэтому использую асинхронность. Наверно можно подумать о вэбсокете, но основная логика уже реализована на асинхронных запросах, поэтому хочется рассмотреть все возможные варианты решения, прежде чем глобально переписывать код.
Буду рад любым конструктивным комментариям и ответам.
Заранее спасибо.
Изменено:
Спрашивали, что будет если убрать параметр timeout
. Вместо +/-3 секунд придется подождать гораздо больше. И будет следующая ошибка
ConnectionAbortedError: SSL handshake is taking longer than 60.0 seconds: aborting the connection
raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientProxyConnectionError: Cannot connect to host proxy:port ssl:default [None]