Настройка прокси в Python
Подключите SotaProxy к любой Python HTTP-библиотеке менее чем за 5 минут.
Python - самый распространённый язык для веб-скрапинга и автоматизации. SotaProxy работает с каждой основной Python HTTP-библиотекой: requests, httpx, aiohttp и urllib. Конфигурация одинакова во всех - задайте URL прокси с вашими учётными данными.
Руководство по настройке
Установите requests (если нужно)
pip install requestsБиблиотека requests - простейший вариант для синхронного скрапинга.
Базовая настройка прокси
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.
Sticky-сессия (один IP для нескольких запросов)
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.
Гео-таргетинг
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 и ротацией прокси
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 может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.
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},
)Оба типа адресов в одном клиенте
Наша резидентка и наши статические адреса авторизуются одинаково, по логину и паролю. Разница живёт в хосте и в том, что вы дописываете после логина:
Для 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 минут.
Начать