Как настроить прокси-сервер в AIOHTTP

Узнайте из этого пошагового руководства, как настроить прокси-сервер в AIOHTTP
4 min read
How to Set Proxy in AIOHTTP

В конце этого руководства по интеграции прокси-серверов AIOHTTP вы узнаете:

  • Что такое AIOHTTP.
  • Почему вам следует использовать прокси-сервер.
  • Как настроить прокси-сервер HTTP, HTTPS или SOCKS в AIOHTTP.
  • Что делать с аутентификацией через прокси-сервер, ошибками SSL-сертификатов, ротацией IP-адресов и многим другим.

Что такое AIOHTTP?

AIOHTTP — популярный асинхронный HTTP-фреймворк Python с открытым исходным кодом. Вот его основные функции:

  • Поддержка протокола HTTP как на стороне клиента, так и на стороне сервера.
  • Поддержка веб-сокетов клиентов и серверов.
  • Предоставление веб-серверу промежуточного программного обеспечения и подключаемой маршрутизации.

Для целей этого руководства важна возможность выполнения HTTP-запросов поверх asyncio в качестве HTTP-клиента. AIOHTTP особенно хорошо подходит для создания сценариев, которые должны эффективно обрабатывать несколько одновременных запросов.

На момент написания этой статьи у AIOHTTP более 14 тысяч звезд на GitHub.

Зачем вам нужен прокси-сервер AIOHTTP?

Убедительной причиной использования прокси-сервера в AIOHTTP является защита вашей личности в Интернете. Направляя запрос на прокси-сервер, вы можете скрыть свой IP-адрес и местоположение, в результате чего целевой сайт будет рассматривать ваш запрос как исходящий от прокси-сервера, а не от вас. Это означает, что вас будет сложнее идентифицировать и отслеживать, что обеспечит конфиденциальность ваших онлайн-операций и позволит избежать запретов на использование IP-адресов и географических ограничений.

Обратите внимание, что вы можете достичь того же результата с помощью запросов, как описано в нашем руководстве по интеграции прокси-серверов с помощью запросов.

Настройка прокси-сервера в AIOHTTP

Из этого раздела с пошаговыми инструкциями вы узнаете, как настроить прокси-сервер HTTP, HTTPS или SOCKS в AIOHTTP.

Предварительные требования к AIOHTTP

Здесь мы предположим, что на вашем компьютере уже установлен Python и есть проект Python с виртуальной средой. Установите AIOHTTP и его рекомендуемые зависимые объекты с помощью следующей команды:

pip install aiohttp[speedups]

Это добавит aiohttp в перечень зависимых объектов вашего проекта.

Откройте файл скрипта Python и добавьте импорт aiohttp:

import aiohttp

Чтобы aiohttp работал с синтаксисом async/await, вам нужно использовать asyncio. Поэтому импортируйте и эту библиотеку и настройте базовую функцию async main ():


import aiohttp
import aiohttp

import asyncio

async def main():
  # aiohttp logic...

asyncio.run(main())

Великолепно! Вы готовы написать логику интеграции AIOHTTP с прокси-сервером!

Предварительные требования к прокси-серверу

Прежде чем узнать, как интегрировать прокси-сервер в AIOHTTP, вам необходимо понять, как выглядит URL-адрес прокси-сервера.

Вот формат URL-адреса, необходимого для подключения к прокси-серверу в AIOHTTP:

<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]

В частности, он включает в себя следующее:

  • <PROTOCOL>: http для прокси-серверов HTTP, https для прокси-серверов HTTPS и socks, socks4или socks5 для прокси-серверов в различных протоколах SOCKS.
  • <HOST>: IP-адрес прокси-сервера или всего его домена (например, proxydomain.com).
  • <PORT>: порт, который прослушивает прокси-сервер.
  • <USERNAME>: необязательное имя пользователя аутентификации прокси-соединения.
  • <PASSWORD>: дополнительный пароль для аутентификации прокси-соединения.

Обратите внимание, что <PROTOCOL> и <HOST> являются единственными обязательными частями URL-адреса. Раздел <PORT> необязателен, но обычно его необходимо добавить. Наконец, раздел учетных данных <USERNAME>:<PASSWORD> необходим только при работе с аутентифицированными прокси-серверами.

Если у вас нет URL-адреса прокси-сервера, вы можете получить его в Интернете бесплатно. В то же время имейте в виду, что бесплатные прокси-серверы ненадежны, ограничивают объем передаваемых данных, противоречивы, подвержены ошибкам и пользуются дурной славой. Их можно использовать только в учебных целях. Для реального производства вам понадобится надежный прокси-сервер премиум-класса от такого первоклассного поставщика, как Bright Data.

Далее в этой статье вы узнаете, как получить прокси-сервер Bright Data и использовать его в AIOHTTP.

Интеграция с прокси-сервером HTTP

Как упоминалось в документации, AIOHTTP поддерживает интеграцию с прокси-сервером HTTP. Предположим, что это URL-адрес вашего прокси-сервера HTTP:

http://190.6.23.219:999

Вы можете указать его в своем запросе AIOHTTP, используя опцию прокси, как показано ниже:


async with aiohttp.ClientSession() as session:
    async with session.get(
        'https://example.com',
        proxy='http://190.6.23.219:999'
    ) as response:
        print(response.status)

Тогда AIOHTTP направит запрос GET через URL-адрес прокси-сервера, переданный в качестве аргумента proxy в функцию get ().

Имейте в виду, что вы можете использовать прокси-сервер HTTP как для HTTP-трафика, так и для HTTPS-трафика.

Интеграция с прокси-сервером HTTPS

В случае с прокси-сервером HTTPS, все немного сложнее. В документации по AIOHTTP указано следующее:

«В Python 3.10 поддержка TLS в TLS отключена для транспортов, которые использует asyncio. Если в следующей версии Python (скажем, в версии 3.11) будет включен один атрибут, он просто заработает™.

aiohttp версии 3.8 и выше готов к этому и имеет встроенный код, поддерживающий TLS-in-TLS, поэтому запросы HTTPS отправляются через прокси-туннели HTTPS».

Другими словами, если вы хотите использовать HTTPS-прокси в AIOHTTP, вам необходимо обновить Python до версии 3.11 и aiohttp до версии 3.8 или выше. Подход к интеграции прокси-серверов HTTPS в AIOHTTP остается таким же, как показано выше. Единственное изменение — прокси-протокол будет иметь вид https, а не http.

Интеграция с прокси-сервером SOCKS

AIOHTTP не поддерживает прокси-серверы SOCKS «из коробки». Если вам нужно использовать прокси-сервер SOCKS в AIOHTTP, вам необходимо установить aiohtpp-socks:

pip install aiohttp_socks

Эта библиотека использует python-socks для расширения AIOHTTP за счет поддержки SOCKS4(a) и SOCKS5(h).

Считайте это URL-адресом вашего прокси-сервера SOCKS:

socks5://98.175.31.195:4145

Используйте его в AIOHTTP следующим образом:


# initialize a SOCKS proxy connector
connector = ProxyConnector.from_url('socks5://98.175.31.195:4145')

# initialize an AIOHTTP client with the SOCKS proxy connector
async with aiohttp.ClientSession(connector=connector) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

Теперь AIOHTTP перенаправит запрос GET через указанный прокси-сервер SOCKS.

ProxyConnector поставляется из aiohttp-socks, поэтому не забудьте импортировать его с помощью:

from aiohttp_socks import ProxyConnector

За кулисами aiohttp-socks определяет коннектор AIOHTTPr для настройки запросов и их прохождения через данный прокси-сервер SOCKS.

Полный пример

Вы только что узнали, как использовать прокси-сервер с AIOHTTP. Давайте удостоверимся, что вышеуказанные подходы работают, в полном примере!

Для простоты мы будем работать с HTTP-прокси, но вы можете легко адаптировать приведенный ниже пример к HTTPS и SOCKS.

Целевым URL-адресом запроса GET будет конечная точка /ip из проекта HttpBin. Этот API возвращает IP-адрес входящего запроса. Таким образом, если интеграция с прокси-сервером прошла успешно, ответ конечной точки должен содержать IP-адрес прокси-сервера, а не ваш адрес.

Опять же, предположим, что это URL-адрес вашего прокси-сервера HTTP:

http://190.6.23.219:999

Интегрируйте его в AIOHTTP и распечатайте данные, возвращенные конечной точкой https://httpbin.io/ip, с помощью:


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://httpbin.io/ip',
          proxy='http://190.6.23.219:999'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Выполните этот скрипт, и вы получите:


{
  'origin': '190.6.23.219'
}

Все получилось! Это нужный IP-адрес прокси-сервера, а, значит, интеграция с прокси-сервером AIOHTTP работает просто великолепно.

Примечание: срок существования прокси-серверов небольшой. К моменту прочтения этого руководства выбранный прокси-сервер больше не будет работать, а приведенный выше скрипт будет выполняться с ошибкой. Чтобы он заработал, замените прокси-сервер HTTP новым и рабочим.

Прокси-сервер AIOHTPP: расширенные варианты использования

Вы знаете основы интеграции прокси-серверов AIOTTP, но как насчет более сложных методов? Узнайте больше в этом разделе!

Глобальные прокси-серверы через переменные окружения

AIOHTTP поддерживает два способа определения используемого прокси-сервера:

  1. Он использует URL-адрес прокси-сервера, переданный аргументу proxy.
  2. Если для trust_env задано значение True, он считывает переменные окружения HTTP_PROXY и HTTPS_PROXY.

Поэтому вы можете глобально настроить прокси-сервер в AIOHTTP, установив настроив следующие среды:

  • HTTP_PROXY: URL-адрес прокси-сервера, используемого для HTTP-запросов.
  • HTTPS_PROXY: URL-адрес прокси-сервера, используемого для HTTPS-запросов.

Например, установите их в Linux или macOS с помощью следующих команд:


export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"

Затем передайте trust_env=true в aiohttp.clientSession ():

async with aiohttp.ClientSession(trust_env=True) as session:

Теперь вы можете вызвать session.get () без аргумента proxy


async with aiohttp.ClientSession(trust_env=True) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

Отлично! AIOHTTP будет использовать прокси-серверы, указанные в переменных окружения, для каждого запроса HTTP и HTTPS.

Перейдите по ссылке, чтобы узнать больше, так как тот же механизм работает с прокси-сервером в cURL.

Подходы к аутентификации через прокси-сервер

Попытка подключиться к аутентифицированному прокси-серверу без правильных учетных данных приведет к ошибке 407 Proxy Authentication Required (407 Требуется аутентификация прокси-сервера).

Предположим, что приведенная ниже строка представляет собой URL-адрес для подключения к аутентифицированному прокси-серверу HTTP:

http://admin:[email protected]:8928

Здесь используется простой URL-адрес прокси-сервера:

http://20.198.112.312:892

Вот учетные данные для аутентификации:

  • Имя пользователя: admin
  • Пароль: pK5ip98NWp56l9sjy

AIOHTTP поддерживает два способа работы с аутентифицированными прокси-серверами:

  1. Укажите учетные данные непосредственно в URL-адресе прокси-сервера:

async with session.get(
  'https://example.com/',
  proxy='http://admin:[email protected]:8928'
) as response:

2. Передайте имя пользователя и пароль объекту AIOHttp.basicAuth () , а затем используйте их в опции proxy_auth:


proxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')
async with session.get(
    'https://example.com/',
    proxy="http://20.198.112.312:892",
    proxy_auth=proxy_auth
) as response:

Потрясающе! Аутентификация прокси-сервера AIOHTTP больше не является секретом.

Избегайте ошибок SSL-сертификатов

При настройке прокси-сервера в AIOHTTP ваши запросы могут завершиться неудачей из-за следующей ошибки:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain 

Чтобы избежать этих проблем с SSL-сертификатами, отключите проверку SSL с помощью SSL=false:


async with aiohttp.ClientSession() as session:
    async with session.get(
      'https://example.com',
      proxy='http://190.6.23.219:999',
      ssl=False # turn of SSL certificate verification
    ) as response:
        print(response.status)

Ошибки проверки SSL-сертификата AIOHTTP немедленно исчезнут.

Ротация прокси-серверов в AIOHTTP

Если вы снова и снова будете использовать один и тот же прокси-сервер, есть вероятность, что целевой сайт заблокирует его IP-адрес. Чтобы избежать этого, убедитесь, что в вашем запросе используются разные прокси-серверы.

Вот как это сделать:

  1. Заполните список Python множеством URL-адресов прокси-серверов.
  2. Случайно выбирайте URL-адрес прокси-сервера перед каждым запросом.
  3. Задайте URL-адрес выбранного прокси-сервера в AIOHTTP.

Основная проблема этого подхода заключается в том, что он включает стереотипный код. Кроме того, требуется доступ к пулу надежных прокси-серверов, который не является бесплатным. К счастью, у Bright Data есть более эффективное решение! Ротируемые прокси автоматически меняют выходные IP-адреса, доступны в 195 странах, отличаются исключительным временем безотказной работы сети и гарантируют 99,9%-ную успешность соединения.

Из следующей главе вы узнаете, как начать использовать портируемые прокси-серверы Bright Data в AIOHTTP.

Интеграция AIOHTTP с прокси-сервером Bright Data

Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Всемирная сеть прокси-серверов компании включает в себя:

Это одна из крупнейших и самых надежных прокси-сетей в мире!

Следуйте инструкциям ниже и узнайте, как использовать прокси-серверы Bright Data в AIOHTTP.

Если у вас уже есть аккаунт, войдите в Bright Data. В противном случае создайте аккаунт бесплатно. Вы получите доступ к следующей панели управления пользователя:

Нажмите кнопку «Просмотреть прокси-продукты», как показано ниже:

посмотреть прокси-продукты

Вы будете перенаправлены на следующую страницу «Прокси-серверы и инфраструктура скрейпинга»:

Прокрутите вниз, найдите карточку «Резидентные прокси» и нажмите кнопку «Начать»:

резидентный прокси-сервер

Вы попадете на панель управления конфигурацией резидентного прокси-сервера. Следуйте инструкциям мастера и настройте прокси-службу в соответствии со своими потребностями. Если вы сомневаетесь в настройке прокси-сервера, обращайтесь в круглосуточную службу поддержки.

Перейдите на вкладку «Параметры доступа» и получите хост, порт, имя пользователя и пароль вашего прокси-сервера следующим образом:

параметр доступа

Обратите внимание, что в поле «Host» уже указан порт.

Это все, что вам нужно, чтобы создать URL-адрес прокси-сервера и использовать его в AIOHTTP. Соберите всю информацию и создайте URL-адрес со следующим синтаксисом:

<Username>:<Password>@<Host>

Например, в этом случае это будет:

brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX

Активируйте переключатель «Активный прокси», следуйте последним инструкциям, и все готово!

активный прокси-сервер

Ваш фрагмент прокси-сервера AIOHTTP для интеграции Bright Data будет выглядеть следующим образом:


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://lumtest.com/myip.json',
          proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Заключение

Из этого руководства по интеграции прокси-серверов AIOHTTP вы узнали, почему вам следует использовать прокси-серверы и как это сделать с помощью aiohttp. Теперь вы знаете, как настроить прокси-сервер HTTP, HTTPS или SOCKS в AIOHTTP, популярной библиотеке HTTP-клиента Python. Как было показано в руководстве, для этого требуется всего лишь несколько строк кода!

Благодаря этому руководству вы также поняли, почему никогда не следует пользоваться услугами бесплатных прокси-серверов. Вместо этого вам следует использовать надежные прокси-серверы от надежного поставщика. Кто лучший поставщик на рынке? Bright Data! Процедура интеграции прокси-сервера в AIOHTTP остается прежней, но преимущества прокси-серверов премиум-класса безграничны.