К содержимому

Ротация прокси в Python: requests и httpx, новый IP

Почему Session держит один IP, как получить новый и как удержать один IP на короткую задачу.

Почему Session держит один IP

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

В документации Requests сказано: Session использует пул соединений urllib3, поэтому несколько запросов к одному хосту переиспользуют TCP-соединение. HTTPX говорит то же про Client, а функции верхнего уровня вроде httpx.get создают новое соединение на каждый запрос. Именно это определяет, когда меняется IP.

Что выбрать под цель

Что выбрать под цель
Пунктrequestshttpx
Новый IP на каждый запросНовый Session на запрос (или requests.get)Новый Client на запрос (или httpx.get)
Один IP на несколько запросовОдин Session или прокси в режиме одного IPОдин Client или прокси в режиме одного IP
SOCKS5pip install "requests[socks]", схема socks5h://pip install "httpx[socks]", схема socks5://
Таймаут по умолчаниюНет — задайте сами5 секунд бездействия

Источник: документация Requests и HTTPX, прочитана 12.11.2026. requests.get() на каждый вызов создаёт временный Session.

Python requests: новый IP на запрос и один Session

# pip install requests
import requests

PROXY = "http://LOGIN:PASSWORD@HOST:PORT"   # from My assets
PROXIES = {"http": PROXY, "https": PROXY}
URL = "https://ipinfo.io/ip"

def ip_on_new_connection():
    # A fresh Session has an empty connection pool, so it opens a new connection.
    with requests.Session() as s:
        return s.get(URL, proxies=PROXIES, timeout=(5, 20)).text.strip()

print("new connection each time:", [ip_on_new_connection() for _ in range(5)])

with requests.Session() as s:
    print("one Session:", [s.get(URL, proxies=PROXIES, timeout=(5, 20)).text.strip() for _ in range(5)])

Только пример: подставьте HOST, PORT, LOGIN и PASSWORD из «Мои активы». В режиме ротации первый список должен меняться от вызова к вызову; второй обычно повторяется, потому что Session использует одно соединение.

Python httpx: новый Client и один Client

# pip install httpx
import httpx

PROXY = "http://LOGIN:PASSWORD@HOST:PORT"   # from My assets
URL = "https://ipinfo.io/ip"
TIMEOUT = httpx.Timeout(20.0, connect=10.0)

def ip_on_new_connection():
    # A new Client has its own empty connection pool.
    with httpx.Client(proxy=PROXY, timeout=TIMEOUT) as client:
        return client.get(URL).text.strip()

print("new connection each time:", [ip_on_new_connection() for _ in range(5)])

with httpx.Client(proxy=PROXY, timeout=TIMEOUT) as client:
    print("one Client:", [client.get(URL).text.strip() for _ in range(5)])

Только пример, логика та же: новый Client открывает новое соединение, один Client переиспользует соединения.

Один IP на короткую задачу

Некоторые сервисы кодируют сессию в имени пользователя. В Proxy302 режим выбирается при создании: на странице динамических прокси дата-центра выберите «Один IP около 10 минут» вместо «Новый IP на подключение». IP держится около 10 минут и меняется после этого или примерно через 60 секунд простоя.

Режим с одним IP подходит для входа, многостраничного сценария или загрузки, которая должна идти с одного адреса. Режим выбирается при создании прокси, поэтому выберите его до нажатия кнопки создания.

SOCKS5 в requests и httpx

# pip install "requests[socks]" "httpx[socks]"
import requests, httpx

PROXY = "socks5h://LOGIN:PASSWORD@HOST:PORT"      # requests: socks5h resolves names on the proxy
print(requests.get("https://ipinfo.io/ip", proxies={"http": PROXY, "https": PROXY}, timeout=(5, 20)).text)

PROXY_HTTPX = "socks5://LOGIN:PASSWORD@HOST:PORT"  # httpx accepts a socks5:// URL
with httpx.Client(proxy=PROXY_HTTPX, timeout=20.0) as client:
    print(client.get("https://ipinfo.io/ip").text)

Только пример. Сначала создайте прокси как SOCKS5: у каждого IP один протокол. В requests схема socks5 разрешает имена на вашей машине, socks5h — на прокси.

Повторы и таймауты

import time
import httpx
import requests
from requests.adapters import HTTPAdapter
from urllib3.util import Retry

# requests: retry on a Session, as in the Requests documentation
s = requests.Session()
retries = Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 502, 503, 504])
s.mount("https://", HTTPAdapter(max_retries=retries))

# httpx: a plain retry loop with a growing pause
def get_with_retry(client, url, tries=3):
    for n in range(tries):
        try:
            r = client.get(url)
            if r.status_code not in (429, 502, 503, 504):
                return r
        except httpx.TransportError:
            pass
        time.sleep(2 ** n)
    raise RuntimeError("gave up after %d tries" % tries)

Только пример. Повторяйте только то, что безопасно повторять, и делайте паузу между попытками. Повтор через динамический прокси может уйти с другого IP.

Создайте и проверьте прокси

  1. Шаг 1. Откройте страницу динамических прокси дата-центра

    Выходы только из США. Выберите режим (новый IP на подключение или один IP около 10 минут) и протокол HTTP или SOCKS5.

  2. Шаг 2. Создайте и скопируйте

    Оплата за ГБ с кошелька, $0,40 за ГБ, без пакетов трафика. Скопируйте HOST, PORT, LOGIN и PASSWORD из «Мои активы».

  3. Шаг 3. Запустите примеры

    Вставьте данные в пример requests или httpx и запустите.

    Ожидаемый результат В режиме ротации список «новое соединение» показывает разные IP США; список «один Session» может повторять один.

Для чего подходят IP дата-центров

У этой линии только выходы США, и сайты могут распознать адреса как адреса дата-центров. Она подходит для сбора данных, мониторинга и работы с API с соблюдением условий целевого сайта. Для аккаунтов, магазинов и рекламных кабинетов берите резидентные или статические ISP IP.

Диагностика

IP каждый раз один и тот же

Проверьте Вы используете один Session или Client или создали прокси в режиме одного IP?

Решение Открывайте новый Session или Client на запрос либо создайте прокси в режиме «Новый IP на подключение».

Когда остановиться Если новый Client всё равно даёт один IP, проверьте curl -x, чтобы отделить код от прокси.

Ошибки таймаута

Проверьте Посмотрите, какой таймаут сработал (connect или read) и насколько быстр целевой сайт.

Решение Немного увеличьте read-таймаут, оставьте короткий connect-таймаут и добавьте повтор с паузой.

Когда остановиться Если прокси не подключается совсем, перепроверьте HOST, PORT, LOGIN и PASSWORD в «Мои активы».

Ошибки SOCKS вроде отсутствующей зависимости

Проверьте Проверьте, что установлен requests[socks] или httpx[socks] и что прокси создан как SOCKS5.

Решение Установите дополнение, используйте правильную схему URL или создайте HTTP-прокси.

Частые вопросы

Как получать новый IP на каждый запрос с ротационным прокси в Python?

Открывайте новое соединение каждый раз: новый requests.Session или httpx.Client на запрос либо requests.get и httpx.get, которые не используют общий пул. Один Session или Client в цикле переиспользует соединение и сохраняет IP.

Почему мой Session возвращает один и тот же IP?

Потому что Session повторно использует TCP-соединение к тому же хосту. Создавайте Session на каждый запрос или используйте прокси в режиме «Новый IP на подключение» и новое соединение на каждый вызов.

Можно ли держать один IP несколько минут?

Да. Создайте прокси с режимом «Один IP около 10 минут». Он меняется примерно через 10 минут или после около 60 секунд простоя.

Работает ли этот прокси с SOCKS5 в Python?

Да, если он создан как SOCKS5. Установите requests[socks] или httpx[socks] и используйте адрес socks5:// или socks5h://.

Сколько это стоит?

$0,40 за ГБ с кошелька, пакетов трафика нет. Бесплатного теста нет.

Ссылки и источники

5
  1. Факты о продуктах Proxy302 и прайс

    Наблюдение за продуктом · Проверено:

    Файл фактов сайта, проверен 12.11.2026: линия динамических прокси дата-центра, выходы только США, $0,40 за ГБ с кошелька, HTTP или SOCKS5, по умолчанию новый IP на каждое новое подключение либо один IP около 10 минут (меняется через ~10 минут или после ~60 секунд простоя), бесплатного теста нет.

  2. Requests: Advanced Usage

    Официальная документация · Проверено:

    Прочитано 12.11.2026: Session использует пул соединений urllib3 и повторно использует TCP-соединение к тому же хосту; для SOCKS нужен requests[socks]; socks5 разрешает DNS на клиенте, socks5h — на прокси; таймаута нет, пока его не задать; повторы через urllib3 Retry в HTTPAdapter.

  3. HTTPX: Proxies

    Официальная документация · Проверено:

    Прочитано 12.11.2026: параметр proxy работает у Client и у функций верхнего уровня; логин и пароль указываются в URL; для SOCKS нужен httpx[socks] и адрес socks5://.

  4. HTTPX: Clients

    Официальная документация · Проверено:

    Прочитано 12.11.2026: API верхнего уровня создаёт новое соединение на каждый запрос; Client использует пул соединений и может переиспользовать одно TCP-соединение.

  5. HTTPX: Timeouts

    Официальная документация · Проверено:

    Прочитано 12.11.2026: по умолчанию TimeoutException после 5 секунд бездействия сети; таймауты connect, read, write и pool; httpx.Timeout(10.0, connect=60.0).

Готовы попробовать?

Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.