Ротация прокси в Python: requests и httpx, новый IP
Почему Session держит один IP, как получить новый и как удержать один IP на короткую задачу.
Почему Session держит один IP
Динамический прокси дата-центра выбирает IP выхода при открытии соединения. Если код держит соединение открытым и использует его снова, IP не меняется.
В документации Requests сказано: Session использует пул соединений urllib3, поэтому несколько запросов к одному хосту переиспользуют TCP-соединение. HTTPX говорит то же про Client, а функции верхнего уровня вроде httpx.get создают новое соединение на каждый запрос. Именно это определяет, когда меняется IP.
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 использует одно соединение.
# 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 переиспользует соединения.
Некоторые сервисы кодируют сессию в имени пользователя. В Proxy302 режим выбирается при создании: на странице динамических прокси дата-центра выберите «Один IP около 10 минут» вместо «Новый IP на подключение». IP держится около 10 минут и меняется после этого или примерно через 60 секунд простоя.
Режим с одним IP подходит для входа, многостраничного сценария или загрузки, которая должна идти с одного адреса. Режим выбирается при создании прокси, поэтому выберите его до нажатия кнопки создания.
# 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.
Оплата за ГБ с кошелька, $0,40 за ГБ, без пакетов трафика. Скопируйте HOST, PORT, LOGIN и PASSWORD из «Мои активы».
Шаг 3. Запустите примеры
Вставьте данные в пример requests или httpx и запустите.
Ожидаемый результат В режиме ротации список «новое соединение» показывает разные IP США; список «один Session» может повторять один.
Для чего подходят IP дата-центров
У этой линии только выходы США, и сайты могут распознать адреса как адреса дата-центров. Она подходит для сбора данных, мониторинга и работы с API с соблюдением условий целевого сайта. Для аккаунтов, магазинов и рекламных кабинетов берите резидентные или статические ISP 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 за ГБ с кошелька, пакетов трафика нет. Бесплатного теста нет.
Файл фактов сайта, проверен 12.11.2026: линия динамических прокси дата-центра, выходы только США, $0,40 за ГБ с кошелька, HTTP или SOCKS5, по умолчанию новый IP на каждое новое подключение либо один IP около 10 минут (меняется через ~10 минут или после ~60 секунд простоя), бесплатного теста нет.
Прочитано 12.11.2026: Session использует пул соединений urllib3 и повторно использует TCP-соединение к тому же хосту; для SOCKS нужен requests[socks]; socks5 разрешает DNS на клиенте, socks5h — на прокси; таймаута нет, пока его не задать; повторы через urllib3 Retry в HTTPAdapter.
Прочитано 12.11.2026: параметр proxy работает у Client и у функций верхнего уровня; логин и пароль указываются в URL; для SOCKS нужен httpx[socks] и адрес socks5://.
Прочитано 12.11.2026: API верхнего уровня создаёт новое соединение на каждый запрос; Client использует пул соединений и может переиспользовать одно TCP-соединение.
Прочитано 12.11.2026: по умолчанию TimeoutException после 5 секунд бездействия сети; таймауты connect, read, write и pool; httpx.Timeout(10.0, connect=60.0).
Готовы попробовать?
Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.