Код выполняет асинхронную проверку proxy на определенном сайте. Как я понял при большом количестве одновременных запросов сайт блокирует все запросы. Использую fake_headers, но это ничего не меняет. Подскажите как можно уменьшить количество одновременных запросов? Может есть еще какие-то варианты как улучшить программу?
Дополнительная информация:
IP использую достаточное количество, поэтому запросы проходят каждый раз по разным ip, 4-5 запроса всегда успешны.
Коды ошибок:
400, message='Bad Request', url=URL('http://81.200.123.74:80')
[WinError 10054] Удаленный хост принудительно разорвал существующее подключение
500, message='Internal Server Error', url=URL('http://35.187.4.12:8888')
403, message='Forbidden', url=URL('http://20.111.54.16:80')
407, message='Proxy Authentication Required', url=URL('http://23.229.125.132:9161')
Server disconnected
Cannot connect to host 94.130.184.102:10015 ssl:False [Connect call failed ('94.130.184.102', 10015)]
И заметил еще один момент, что коды ошибок (я их записываю в файле) где-то после 100 запросов, ответ с ошибками пропадает, строка пустая ...
from fake_headers import Headers
import asyncio
import aiohttp
async def a():
tasks = []
header = Headers(headers=True)
async with aiohttp.ClientSession(trust_env=True) as session:
with open('new_proxy') as file:
file1 = ''.join(file.readlines()).strip().split('\n')
for proxyes in file1:
task = asyncio.create_task(b(session, headers = header.generate(), params = {***}, proxy = f'http://{proxyes}')
tasks.append(task)
await asyncio.gather(*tasks)
async def b(session, headers, params, proxy ):
url = '***'
try:
async with session.post(url = url,headers=headers, json = params,proxy = proxy, ssl=False, timeout=3) as response:
with open('proxy', 'r+', encoding='utf-8') as f:
f.seek(0, 2)
f.write(f'{proxy}')
f.write('\n')
except Exception as e:
with open('proxy_error', 'r+', encoding='utf-8') as f:
f.seek(0, 2)
f.write(f'{e}')
f.write('\n')
if __name__ == '__main__':
asyncio.run(a())
Нашел по данной теме:
async def loop_wrap(urls):
for url in urls:
asyncio.ensure_future(download(url))
await asyncio.sleep(1/50)
asyncio.ensure_future(loop_wrap(urls))
loop.run_forever()
Пробовал его, но что-то не работает ...