Настройка прокси в httpx

Прокси в httpx для Python: параметр proxy в Client и AsyncClient, логин и пароль в адресе, SOCKS5 через httpx[socks] и выбор порта под задачу.

Обновлено · Редакция Prokso

Данные для подключения
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новый IP на каждый запрос · 10000–20000 фиксированный IP (sticky-сессия), HTTP(S) и SOCKS5
Логин и пароль
в кабинете, на странице плана

Готовые строки в нужном формате генерирует кабинет: выберите страну, тип IP и протокол.

Коротко
  • Хост — gw.prokso.com, порты 823 (HTTP), 824 (SOCKS5), 10000–20000 (фиксированный IP, HTTP или SOCKS5)
  • Логин и пароль — в кабинете на странице плана
  • Проверяйте IP в ответе самого запроса через прокси: страница «Мой IP» в браузере ваш скрипт не проверяет

Пошаговая инструкция, как подключить прокси Prokso в httpx. Займёт несколько минут.

Шаг 1. Возьмите данные прокси в кабинете

Откройте план и скопируйте хост gw.prokso.com, порт, логин и пароль. Порт 823 — HTTP, 824 — SOCKS5 (оба дают новый IP на каждый запрос); порты 10000–20000 — фиксированный IP до 120 минут, работают и как HTTP, и как SOCKS5 (каждый порт — отдельный адрес). Страну задают в логине: логин__cr.ua.

Шаг 2. Установите библиотеку

pip install httpx. Для SOCKS5 — pip install "httpx[socks]". Примеры ниже написаны для httpx 0.28: в ней прокси передают параметром proxy, старый параметр proxies убран.

import httpx

PROXY = "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    r = client.get("https://api.ipify.org?format=json")
    print(r.json())

Шаг 3. Передайте прокси клиенту

Создайте httpx.Client с параметром proxy: логин и пароль впишите прямо в адрес. Все запросы этого клиента пойдут через прокси, а соединения с прокси будут переиспользоваться — это быстрее, чем отдельный httpx.get на каждый запрос.

import asyncio
import httpx


async def main():
    async with httpx.AsyncClient(proxy="socks5://ЛОГИН:ПАРОЛЬ@gw.prokso.com:824", timeout=30) as client:
        urls = ["https://api.ipify.org?format=json"] * 3
        for r in await asyncio.gather(*(client.get(u) for u in urls)):
            print(r.json())


asyncio.run(main())

Шаг 4. Асинхронные запросы и SOCKS5

httpx.AsyncClient принимает тот же параметр. Для SOCKS5 смените схему на socks5:// и порт на 824: httpx передаёт прокси имя сайта, поэтому DNS-запросы не идут мимо прокси.

Шаг 5. Выберите порт под задачу

Для параллельного сбора данных оставляйте 823 или 824 — каждый запрос получит новый адрес. Чтобы серия запросов шла с одного IP, возьмите фиксированный порт 10000–20000: он работает и с http://, и с socks5://.

Шаг 6. Если соединение не устанавливается

Сверьте хост gw.prokso.com, порт и схему: HTTP на 823, SOCKS5 на 824, на портах 10000–20000 — оба. Ошибка 407 означает неверный логин или пароль либо закончившийся трафик: проверьте остаток на странице плана в кабинете. Таймаут чаще всего значит, что порт введён с ошибкой или клиент ждёт другой протокол. Если работаете с доступом по IP, убедитесь, что в белый список добавлен внешний адрес именно той машины, где запускается код.

Шаг 7. Проверьте вывод

Запустите пример: скрипт обращается к https://api.ipify.org и печатает IP, который видит сайт. Это должен быть адрес прокси, а не ваш. Ошибка 407 означает неверный логин или пароль либо закончившийся трафик на плане. Страница «Мой IP» в браузере здесь не поможет: браузер идёт напрямую.

Вопросы и ответы

Берёт ли httpx прокси из переменных окружения?

Да, по умолчанию httpx читает <code>HTTP_PROXY</code> и <code>HTTPS_PROXY</code>. Если прокси передан параметром <code>proxy</code>, действует он. Чтобы переменные не влияли на скрипт, создайте клиент с <code>trust_env=False</code>.

Что значит ошибка ProxyError: 407?

Прокси не принял логин или пароль. Скопируйте строку из генератора в кабинете ещё раз и проверьте, остался ли трафик на плане.

Какой порт выбрать?

Порт 823 (HTTP) или 824 (SOCKS5) даёт новый IP на каждый запрос — удобно для сбора данных. Порт 10000–20000 держит один IP до 120 минут — для сессий со входом в аккаунт. На план приходится до 1000 одновременных соединений.

Как выбрать страну?

Страна записана в логине прокси. Сгенерируйте в кабинете строку для нужной страны и подставьте в код логин из неё — остальной адрес не меняется.

Что делать, если часть запросов падает?

При сборе данных отдельные адреса бывают медленными или недоступными. Добавьте в код несколько повторных попыток с паузой: на порту 823 или 824 каждая попытка пойдёт уже с нового адреса.