Найти - Пользователи
Полная версия: Повторная попытка соединения в aiohttp
Начало » Python для новичков » Повторная попытка соединения в aiohttp
1
Injector
Добрый день!
Как сделать повторный запрос к url с другого прокси, если статус ответа не 200? Заранее спасибо.
 async def func(url):
    for x in url:
        connect1 = ProxyConnector.from_url('http://тут-адрес-ротационных-прокси')
        async with aiohttp.ClientSession(connector=connect1) as session:
            async with session.get(x, headers=headers) as response:
                if response.status == 200:
                    print("Ура")
                else:
                    print("Сайт недоступен")
ZerG
await response
Injector
ZerG
await response
Можете подробнее объяснить как это реализовать? Например, 3 повторных попытки запроса.
ZerG

Попробуй таки через aiohttp

 import aiohttp
url_to_scrape = ["http://example.com"]  # Список сайтов 
proxies = ["http://proxy1.com", "http://proxy2.com", "http://proxy3.com"]
async def connector(url, proxies, max_retries=3):
    """
    url: list - список сайтов для коннекта
    proxies: list - список проксей через которые хочешь ходить
    max_retries: int - количество попыток для соединения перед переходом к другому прокси
    """
    headers = {'User-Agent': 'Your User Agent'} # Тут свой набор хедеров вставишь
    # Если сайт всегда будет один - убери начальный for 
    for site in url:
        for proxy_url in proxies:
            retries = 0
            while retries < max_retries:
                pconnect = aiohttp.ProxyConnector.from_url(proxy_url)
                async with aiohttp.ClientSession(connector=pconnect) as session:
                    async with session.get(site, headers=headers) as response:
                        if response.status == 200:
                            print("Ура")
                            break  # попытка успешна - вышли из цикла
                        else:
                            print(f"Сайт недоступен через {proxy_url}, попытка {retries + 1}/{max_retries}")
                            retries += 1
                if retries >= max_retries:
                    print(f"Прокси не отвечает {proxy_url}, переходим к следующему")
await connector(url_to_scrape, proxies)

Ну дальше уже под себя ровняешь что тебе там надо
Injector
ZerG
Попробуй таки через aiohttp
Благодарю, помогло!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB