Налаштування проксі в 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 (sticky-сесія) до 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 кожна спроба піде вже з нової адреси.