В конце этого руководства по интеграции прокси-серверов 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 поддерживает два способа определения используемого прокси-сервера:
- Он использует URL-адрес прокси-сервера, переданный аргументу proxy.
- Если для
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 поддерживает два способа работы с аутентифицированными прокси-серверами:
- Укажите учетные данные непосредственно в 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-адрес. Чтобы избежать этого, убедитесь, что в вашем запросе используются разные прокси-серверы.
Вот как это сделать:
- Заполните список Python множеством URL-адресов прокси-серверов.
- Случайно выбирайте URL-адрес прокси-сервера перед каждым запросом.
- Задайте URL-адрес выбранного прокси-сервера в AIOHTTP.
Основная проблема этого подхода заключается в том, что он включает стереотипный код. Кроме того, требуется доступ к пулу надежных прокси-серверов, который не является бесплатным. К счастью, у Bright Data есть более эффективное решение! Ротируемые прокси автоматически меняют выходные IP-адреса, доступны в 195 странах, отличаются исключительным временем безотказной работы сети и гарантируют 99,9%-ную успешность соединения.
Из следующей главе вы узнаете, как начать использовать портируемые прокси-серверы Bright Data в AIOHTTP.
Интеграция AIOHTTP с прокси-сервером Bright Data
Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Всемирная сеть прокси-серверов компании включает в себя:
- Прокси-серверы центров обработки данных — более 770 000 IP-адресов центров обработки данных.
- Резидентные прокси — более 72 млн резидентных IP-адресов в более чем 195 странах.
- Прокси-серверы интернет-провайдеров — более 700 000 IP-адресов интернет-провайдеров.
- Мобильные прокси-серверы — более 7 млн мобильных IP-адресов.
Это одна из крупнейших и самых надежных прокси-сетей в мире!
Следуйте инструкциям ниже и узнайте, как использовать прокси-серверы 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 остается прежней, но преимущества прокси-серверов премиум-класса безграничны.
Кредитная карта не требуется