Пошаговое руководство

Как подключить азиатский резидентный прокси в Python Requests?

Короткий ответЧтобы использовать прокси в Python Requests, передайте в каждый запрос словарь proxies, например {"https": "http://USERNAME-country-jp:[email protected]:7777"}. В Jade Proxies имя пользователя также задаёт город и sticky-сессию, а SOCKS5 работает так же: схема socks5h:// и порт 7778.

$50
Ключевой показательСогласно нашей сетке цен, миллион страниц, загруженных через Python Requests, стоит $50 резидентного трафика на тарифе 100 ГБ при условии 100 КБ трафика на страницу.Источник: Сетка цен Jade Proxies, 29 октября 2026; вес страницы 100 КБ — допущение, а не результат измерения

Что нужно для начала?

Вам понадобятся Python 3, библиотека Requests и данные для доступа к прокси. Jade Proxies поддерживает логин и пароль или белый список IP (до 10 IP); субпользователи с собственными учётными данными и лимитом трафика; API-ключи, которые можно отозвать в любой момент. Все примеры отправляют трафик через шлюз gw.jadeproxies.com: порт 7777 для HTTP и HTTPS, порт 7778 для SOCKS5.

  1. 01

    Установите Requests с поддержкой SOCKS

    Выполните pip install "requests[socks]" — команда установит Requests и PySocks.

  2. 02

    Сохраните учётные данные

    Поместите логин и пароль прокси из вашего аккаунта Jade Proxies в переменные окружения PROXY_USER и PROXY_PASS, а не в код.

  3. 03

    Соберите словарь HTTP-прокси

    Укажите для ключей http и https значение http://USER:[email protected]:7777; HTTPS-сайты открываются через туннель CONNECT, поэтому TLS остаётся сквозным.

  4. 04

    При необходимости переключитесь на SOCKS5

    Используйте socks5h://USER:[email protected]:7778, чтобы DNS разрешался на выходном узле, в целевой стране.

  5. 05

    Задайте страну и город

    Дополните имя пользователя параметром -country-jp, затем -city-osaka по формату USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes}.

  6. 06

    Сохраняйте один IP с помощью sticky-сессии

    Добавьте -session-ID-ttl-MINUTES и используйте один requests.Session; IP сохраняется до 30 минут (IP может смениться раньше).

  7. 07

    Проверьте выходной IP

    Запросите https://ipinfo.io/json через прокси и проверьте поле country перед основной задачей.

  8. 08

    Настройте таймауты и повторы

    Передайте timeout=(10, 30) и подключите HTTPAdapter с политикой Retry для ответов 429 и 5xx.

  9. 09

    Запускайте запросы параллельно

    Используйте ThreadPoolExecutor; один запрос на соединение даёт новый IP на каждый запрос.

Как задать HTTP-прокси в Python Requests?

HTTP-прокси задаётся словарём proxies, в котором ключи http и https указывают на HTTP-порт шлюза.

import os
import requests
from urllib.parse import quote

USER = os.environ["PROXY_USER"]
PASS = quote(os.environ["PROXY_PASS"], safe="")  # encodes @ : / in passwords

proxy = f"http://{USER}-country-jp:{PASS}@gw.jadeproxies.com:7777"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://example.com/", proxies=proxies, timeout=(10, 30))
print(r.status_code)

URL прокси начинается с http:// даже под ключом https: Requests открывает туннель CONNECT через шлюз, а TLS-сессия устанавливается между вашим скриптом и сайтом. Статус 407 означает, что шлюз отклонил логин или пароль.

Как использовать SOCKS5-прокси с Requests?

Для SOCKS5 замените схему на socks5h, а порт — на 7778; остальной код не меняется.

proxy = f"socks5h://{USER}-country-kr:{PASS}@gw.jadeproxies.com:7778"
proxies = {"http": proxy, "https": proxy}
r = requests.get("https://example.com/", proxies=proxies, timeout=(10, 30))

Со схемой socks5h шлюз разрешает имя хоста в Корее. С обычной socks5 имя разрешает ваш компьютер: запрос виден вашему локальному DNS, и он может вернуть сервер за пределами целевой страны.

Как выбрать страну и город?

Выходной узел выбирается параметрами в имени пользователя. Jade Proxies предлагает таргетинг по стране и городу на всех тарифах; таргетинг по ASN без доплаты; доступность городов различается.

ЦельИмя пользователя
Любой IP в ЯпонииUSER-country-jp
ОсакаUSER-country-jp-city-osaka
МумбаиUSER-country-in-city-mumbai
Бангкок, один IP на 10 минутUSER-country-th-city-bangkok-session-a1b2c3-ttl-10

Коды стран — двухбуквенные коды ISO для 13 стран со страницы азиатских резидентных прокси. Небольшая вспомогательная функция держит формат в одном месте:

def proxy_url(country, city=None, session=None, ttl=10, socks=False):
    user = f"{USER}-country-{country}"
    if city:
        user += f"-city-{city}"
    if session:
        user += f"-session-{session}-ttl-{ttl}"
    if socks:
        return f"socks5h://{user}:{PASS}@gw.jadeproxies.com:7778"
    return f"http://{user}:{PASS}@gw.jadeproxies.com:7777"

Как сохранить один IP для нескольких запросов?

Чтобы сохранить IP, добавьте в имя пользователя ID сессии и TTL и отправляйте запросы через один requests.Session.

import uuid

p = proxy_url("jp", "tokyo", session=uuid.uuid4().hex[:8], ttl=30)
s = requests.Session()
s.proxies = {"http": p, "https": p}
for page in range(1, 4):
    s.get(f"https://example.jp/list?page={page}", timeout=(10, 30))

Без ID сессии каждое новое соединение получает IP из пула, как правило другой; чтобы получать новый IP при каждом запросе, отправляйте один запрос на соединение (отключите keep-alive). requests.Session держит соединения открытыми, поэтому, если вам нужен новый IP на каждый запрос, используйте обычные вызовы requests.get(). В руководстве по ротируемым и sticky-прокси объясняется, какой режим подходит для какой задачи.

Как проверить, что выходной IP находится в нужной стране?

Запросите через прокси сервис информации об IP и сравните код страны с запрошенным.

info = requests.get("https://ipinfo.io/json", proxies=proxies, timeout=15).json()
assert info["country"] == "JP", info
print(info["ip"], info.get("city"), info.get("org"))

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

Как обрабатывать таймауты и повторы?

Задавайте таймаут подключения и чтения в каждом вызове и повторяйте временные ошибки с нарастающей задержкой: резидентный выходной узел — это домашнее подключение, которое может оборваться в любой момент.

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

retry = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET"])
s = requests.Session()
s.mount("http://", HTTPAdapter(max_retries=retry))
s.mount("https://", HTTPAdapter(max_retries=retry))
r = s.get("https://example.com/", proxies=proxies, timeout=(10, 30))

Повторы расходуют трафик, только если доходят до сайта: учитываются все данные, отправленные и полученные через прокси (исходящий и входящий трафик, включая заголовки); 1 ГБ = 1 000 000 000 байт; попытки соединения, завершившиеся неудачей до обращения к целевому ресурсу, не учитываются.

Как отправлять запросы параллельно?

Используйте пул потоков: Requests синхронна, и каждый поток ждёт своё соединение.

from concurrent.futures import ThreadPoolExecutor

def fetch(url):
    r = requests.get(url, proxies=proxies, timeout=(10, 30))
    return url, r.status_code, len(r.content)

with ThreadPoolExecutor(max_workers=10) as pool:
    for url, status, size in pool.map(fetch, urls):
        print(status, size, url)

Каждый вызов requests.get() открывает своё соединение, поэтому каждый запрос получает свой IP. Начните с 10 потоков, увеличивайте их число, пока доля ошибок и ответов 429 не растёт, и соблюдайте лимиты запросов и правила каждого сайта.

Сколько трафика расходует парсинг на Python Requests?

Расход примерно равен числу страниц, умноженному на средний объём трафика на страницу. В таблице принято 100 КБ на страницу: сжатый HTML плюс заголовки запроса и ответа, без изображений. Этот вес — допущение для расчёта, а не результат измерения.

ПарсингТрафикТарифСтоимость
10 000 страниц1 ГБТест$1.50
100 000 страниц10 ГБРост$6.60
500 000 страниц50 ГБПро$26
1 000 000 страниц100 ГББизнес$50

Согласно нашей сетке цен, при таком весе миллион страниц стоит $50 резидентного трафика на тарифе 100 ГБ. Вес страниц зависит от сайта, поэтому сначала измерьте своё среднее значение на выборке из 1 000 страниц; о маркетплейсах рассказывает руководство по Shopee и Lazada. Все тарифы — на странице цен, а трафик не сгорает.

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

Почему Requests игнорирует мой прокси?

Requests применяет прокси только к схемам URL, которые есть в словаре proxies, поэтому при словаре только с ключом http HTTPS-запросы уходят напрямую. Задайте оба ключа и проверьте, что переменная окружения NO_PROXY не совпадает с целевым хостом.

Чем socks5 отличается от socks5h в Requests?

Со схемой socks5h имя хоста разрешает прокси на выходном узле; с socks5 — ваш компьютер локально. Для азиатских сайтов используйте socks5h, чтобы ответы DNS соответствовали стране выхода.

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

Не указывайте ID сессии в имени пользователя и отправляйте один запрос на соединение, например обычными вызовами requests.get() вместо общего Session. Каждое новое соединение получает IP из пула, как правило другой.

Что означает ошибка 407?

Статус 407 Proxy Authentication Required означает, что шлюз не принял учётные данные. Проверьте кодирование пароля через urllib.parse.quote и синтаксис имени пользователя, например USER-country-jp-city-osaka.

Сколько стоит первый тест?

Тариф 1 ГБ стоит $1.50 — около 10 000 страниц при допущении в 100 КБ, указанном выше. Оплата идёт с криптовалютного баланса, минимальное пополнение баланса — $25, а неиспользованный трафик никогда не сгорает.

Протестируйте 1 ГБ азиатских резидентных IP за $1.50

Пополнение баланса от $25 в BTC, ETH, USDT, USDC, SOL, LTC. Без документов и селфи. Неизрасходованный баланс не сгорает.