Реферальная программа
Разработка

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

Подключите SotaProxy к любой Python HTTP-библиотеке менее чем за 5 минут.

Python - самый распространённый язык для веб-скрапинга и автоматизации. SotaProxy работает с каждой основной Python HTTP-библиотекой: requests, httpx, aiohttp и urllib. Конфигурация одинакова во всех - задайте URL прокси с вашими учётными данными.

Руководство по настройке

1

Установите requests (если нужно)

bash
pip install requests

Библиотека requests - простейший вариант для синхронного скрапинга.

2

Базовая настройка прокси

python
import requests

proxy_url = "http://YOUR_USERNAME:YOUR_PASSWORD@proxy.sotaproxy.com:10000"

proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

response = requests.get("https://httpbin.org/ip", proxies=proxies)
print(response.json())

Замените YOUR_USERNAME и YOUR_PASSWORD на ваши учётные данные SotaProxy. Формат URL прокси - http://user:pass@host:port.

3

Sticky-сессия (один IP для нескольких запросов)

python
import requests

# Append session ID to username for sticky sessions
session_id = 1001
proxy_url = f"http://YOUR_USERNAME_s_{session_id}_ttl_15m:YOUR_PASSWORD@proxy.sotaproxy.com:10000"

proxies = {"http": proxy_url, "https": proxy_url}

# Both requests will use the same IP
r1 = requests.get("https://example.com/page1", proxies=proxies)
r2 = requests.get("https://example.com/page2", proxies=proxies)

Добавьте _s_{id}_ttl_15m к имени пользователя, чтобы держать один IP на нескольких запросах. Смените ID сессии, чтобы ротировать на новый IP.

4

Гео-таргетинг

python
import requests

# Target a specific country (US in this example)
proxy_url = "http://YOUR_USERNAME_c_US:YOUR_PASSWORD@proxy.sotaproxy.com:10000"

proxies = {"http": proxy_url, "https": proxy_url}
response = requests.get("https://example.com", proxies=proxies)

Добавьте _c_XX к имени пользователя, где XX это ISO-код страны заглавными: US, DE, GB, FR.

Полный пример

Асинхронный скрапер с httpx и ротацией прокси

python
import httpx
import asyncio

PROXY_URL = "http://YOUR_USERNAME:YOUR_PASSWORD@proxy.sotaproxy.com:10000"
URLS = [
    "https://example.com/product/1",
    "https://example.com/product/2",
    "https://example.com/product/3",
]

async def fetch(client, url):
    try:
        response = await client.get(url, timeout=30.0)
        return {"url": url, "status": response.status_code, "length": len(response.text)}
    except Exception as e:
        return {"url": url, "error": str(e)}

async def main():
    async with httpx.AsyncClient(proxy=PROXY_URL) as client:
        tasks = [fetch(client, url) for url in URLS]
        results = await asyncio.gather(*tasks)
        for result in results:
            print(result)

asyncio.run(main())

Автоматизируй через SotaProxy API

Всё описанное выше работает без открытия дашборда. С API-ключом Python может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.

python
import requests

API = "https://api.sotaproxy.com/api/v1"
H = {"Authorization": "Bearer sk_live_your_key"}

# Every active proxy on your account - no copy-pasting credentials
proxies = requests.get(f"{API}/proxies", headers=H).json()["proxies"]
p = proxies[0]
proxy_url = f"http://{p['login']}:{p['password']}@{p['ip']}:{p['portHttp']}"

# Buy more when you scale (price-check first with POST /quote)
requests.post(
    f"{API}/orders",
    headers={**H, "Idempotency-Key": "my-unique-order-id"},
    json={"product": "ipv4", "countryId": 565, "periodId": "1m", "quantity": 5},
)
Документация API

Оба типа адресов в одном клиенте

Наша резидентка и наши статические адреса авторизуются одинаково, по логину и паролю. Разница живёт в хосте и в том, что вы дописываете после логина:

Ротация резидентки
login:password@proxy.sotaproxy.com:10000
Привязка к стране
login_c_US:password@proxy.sotaproxy.com:10000
Липкая на 15 минут
login_c_US_s_42_ttl_15m:password@proxy.sotaproxy.com:10000
Статический адрес (ISP, датацентр)
login:password@ваш-ip:50100, SOCKS5 на 50101

Для SOCKS5 нужен дополнительный пакет. Сначала выполните pip install requests[socks], затем пишите socks5h://, чтобы DNS разрешался на нашей стороне, а не на вашей.

Ротация без библиотеки ротации

Прослойка для смены адресов не нужна. Резидентка с ротацией по умолчанию даёт новый IP на каждый запрос, а номер сессии закрепляет один, когда нужно, чтобы он держался:

Python: сессия на воркер, ротация во всём остальном

import requests

BASE = "proxy.sotaproxy.com:10000"
USER, PWD = "login", "password"

def proxy(country=None, session=None, ttl="15m"):
    login = USER
    if country:
        login += f"_c_{country}"
    if session:
        login += f"_s_{session}_ttl_{ttl}"
    url = f"http://{login}:{PWD}@{BASE}"
    return {"http": url, "https": url}

# new IP per request
requests.get(url, proxies=proxy(), timeout=30)

# same IP for a multi-step flow
s = requests.Session()
s.proxies.update(proxy(country="US", session=7))
s.get(login_url); s.post(login_url, data=creds)
  • Переиспользуйте объект Session на каждый воркер. Он держит соединение с нашей точкой входа живым и убирает рукопожатие из каждого запроса.
  • Задавайте timeout в каждом вызове. Без него requests ждёт вечно, и один залипший домашний маршрут повесит воркер до конца прогона.
  • Отправляйте Accept-Encoding: gzip. Резидентка считается по гигабайтам, а HTML-страница сжимается в три-четыре раза.
  • Не кладите учётные данные в переменные окружения HTTP_PROXY на общих машинах. Их наследует каждый дочерний процесс.

Что ломается именно в requests

socks5:// протекает вашим DNS

С socks5:// имя хоста разрешается локально, и ваш резолвер видит каждую цель. Пишите socks5h://, тогда запрос уходит через прокси.

verify=False прячет настоящие сбои

Проверку сертификатов отключают, чтобы заглушить ошибку, которая на деле была замаскированным 407. Чините учётные данные вместо этого.

Одна Session на все потоки

requests.Session не потокобезопасна. Дайте каждому потоку свою, иначе соединения перепутаются и ответы придут не тому вызывающему.

Повтор без смены адреса

429 означает, что этот адрес пока отработал своё. Повторяйте через новый, а не через тот же логин.

Заметки и советы

  • Проверьте связь с прокси: curl -x http://user:pass@proxy.sotaproxy.com:10000 https://httpbin.org/ip
  • При проблемах с проверкой SSL задайте verify=False в requests (не рекомендуется для продакшена) или добавьте CA-сертификат прокси.
  • Настройка прокси в aiohttp использует connector=aiohttp.TCPConnector() и proxy=proxy_url в session.get().

FAQ

Как использовать ротационные прокси с Python requests?

Задайте словарь proxies с вашим эндпоинтом SotaProxy один раз. Ротация происходит на стороне сервера - менять URL прокси между запросами не нужно.

Работает ли SotaProxy со Scrapy?

Да. Задайте DOWNLOADER_MIDDLEWARES и HTTP_PROXY в settings.py или используйте пакет middleware для ротации прокси.

Как обрабатывать ошибки аутентификации прокси?

Убедитесь, что имя пользователя и пароль в URL прокси URL-кодированы, если содержат спецсимволы. Сначала протестируйте через curl, чтобы отделить проблемы аутентификации от проблем кода.

Получи учётные данные прокси

Зарегистрируйся, пополни баланс и скопируй эндпоинт в Python. Займёт менее 5 минут.

Начать