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

Как вызывать OpenAI API через прокси: переменные окружения, Python, Node и curl

Четыре способа направить запросы к OpenAI API через прокси, от самой быстрой проверки до кода, который остаётся в проекте: переменные окружения, curl, Python SDK и Node SDK. К каждому шагу есть проверка выходного IP, в конце заметки про SOCKS5.

Что прокси не меняет

API OpenAI работает только в странах из списка поддерживаемых. Запрос из неподдерживаемого места получает 403 «Country, region, or territory not supported», а OpenAI пишет, что доступ к его сервисам из мест вне списка может привести к блокировке или приостановке аккаунта. Прокси меняет сетевой выход, из которого уходит запрос. Он не делает API доступным там, где его нет, и не меняет условия OpenAI.

Чем это руководство отличается от страницы «Прокси для OpenAI API»

Страница «Прокси для OpenAI API» объясняет, какой IP купить и как добавить его в белый список IP у OpenAI. Это руководство — инструкция по настройке: где какая настройка прокси работает, как её проверить и что делать, если не работает.

Что понадобится

Адрес прокси HOST, PORT, USERNAME и PASSWORD из «Моих активов» и протокол, с которым вы его купили: HTTP или SOCKS5. Каждый IP хранит только один протокол, поэтому сначала решите, какие примеры вам нужны. Дата-центровый IP стоит US$3,99 за 30 дней, во всех странах одинаково. Если в пароле есть спецсимволы, закодируйте их в адресе (@ — %40, : — %3A, / — %2F), иначе получите ошибку 407.

Какой способ выбрать

Какой способ выбрать
ПунктГде работаетЧто учесть
curl -xОдна команда, любая машинаКлюч -x перекрывает переменные окружения с прокси. Лучший первый тест.
Переменные окруженияПрограммы, которые их читают: curl и Node с NODE_USE_ENV_PROXY=1Действуют на всё, что вы запускаете из этого терминала. Прочитанные нами страницы SDK их не перечисляют, проверяйте каждый инструмент.
Клиент Python SDKТолько созданный вами клиентОписано в документации: DefaultHttpx2Client(proxy=...). Остальное на машине не затрагивается.
fetchOptions в Node SDKТолько созданный вами клиентОписано в документации: fetch из undici и ProxyAgent как dispatcher. Опции undici нужно сочетать с fetch из undici.

Для кода, который остаётся в проекте, берите настройку клиента. Переменные окружения хороши для быстрых проверок и для чужих инструментов.

Шаг 1: проверка через curl

Выполните три команды на машине, с которой будут идти вызовы. Первая должна показать купленную страну. Вторая печатает код ответа: 403 — страна не поддерживается; любой другой код, например 401 из-за отсутствия ключа, значит, что дело не в стране (страница OpenAI с кодами ошибок не описывает запросы без ключа, это наше толкование). Третья выводит список моделей с вашим ключом и доказывает, что ключ работает через прокси.

Шаг 1: проверка через curl

# 1) Which IP and country does the world see through the proxy?
curl -x "http://USERNAME:PASSWORD@HOST:PORT" https://ipinfo.io/json

# 2) Does OpenAI accept this exit? Without a key: 403 = unsupported country; 401 = not a country problem
curl -s -o /dev/null -w "%{http_code}\n" -x "http://USERNAME:PASSWORD@HOST:PORT" \
  https://api.openai.com/v1/models

# 3) With your key: 200 and the list of models
curl -x "http://USERNAME:PASSWORD@HOST:PORT" https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Моих активов». Третий вызов только выводит список моделей, так что это безопасная первая проверка ключа.

Шаг 2: переменные окружения

Многие программы читают HTTPS_PROXY и HTTP_PROXY. Инструменты по-разному относятся к регистру (в руководстве curl http_proxy написана строчными, а HTTPS_PROXY заглавными), поэтому задайте оба варианта. NO_PROXY — список хостов через запятую, которые идут без прокси. Для Node в документации сказано: если задано NODE_USE_ENV_PROXY=1 (или Node запущен с --use-env-proxy), глобальный agent читает эти переменные, а адрес прокси может быть HTTP или HTTPS; про SOCKS5 в этом разделе ничего нет. Для Python прочитанные нами страницы описывают параметр proxy, но не говорят, что OpenAI SDK читает HTTPS_PROXY, поэтому не полагайтесь на это: передайте прокси клиенту, как в шагах 3 и 4, или подтвердите проверкой.

Шаг 2: переменные окружения

# macOS / Linux (bash, zsh). Put the details in a variable once.
export PROXY_URL="http://USERNAME:PASSWORD@HOST:PORT"
export HTTP_PROXY="$PROXY_URL"
export HTTPS_PROXY="$PROXY_URL"
export http_proxy="$PROXY_URL"
export https_proxy="$PROXY_URL"
export NO_PROXY="localhost,127.0.0.1"

# Windows PowerShell
# $env:HTTPS_PROXY = "http://USERNAME:PASSWORD@HOST:PORT"
# $env:HTTP_PROXY  = $env:HTTPS_PROXY

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Моих активов». Эти переменные действуют только в том терминале, где вы их задали.

Шаг 3: Python SDK

Современные версии OpenAI Python SDK построены на HTTPX2. DefaultHttpx2Client сохраняет рекомендованные SDK значения таймаута, пула соединений и редиректов и добавляет прокси; старое имя DefaultHttpxClient тоже работает. Тот же клиент может запросить ipinfo.io, поэтому первая выведенная строка показывает именно тот выход, который использует SDK.

Шаг 3: Python SDK

# pip install -U "openai[httpx2]"   (needs Python 3.10 or later; reads OPENAI_API_KEY from the environment)
from openai import OpenAI, DefaultHttpx2Client

PROXY = "http://USERNAME:PASSWORD@HOST:PORT"   # HTTP line; for SOCKS5 see below
http = DefaultHttpx2Client(proxy=PROXY)

# 1) Which IP does the proxy show?
print(http.get("https://ipinfo.io/json").text)

# 2) Use the same client for the API
client = OpenAI(http_client=http)
for model in client.models.list():
    print(model.id)

# SOCKS5: pip install "httpx2[socks]", then use this line instead
# PROXY = "socks5://USERNAME:PASSWORD@HOST:PORT"

Логин и пароль прокси пишутся в части userinfo адреса, как сказано в документации HTTPX2. Для SOCKS5 установите httpx2[socks] и используйте закомментированную строку socks5://.

Шаг 4: Node SDK

Такая настройка описана в документации OpenAI Node SDK: импортируйте fetch и ProxyAgent из undici и передайте клиенту fetch из undici, а агент — в fetchOptions.dispatcher. SDK подчёркивает, что опции undici вроде dispatcher нужно сочетать с соответствующим fetch, так что не смешивайте ProxyAgent из undici с другим fetch. undici отправляет логин и пароль из адреса как данные для аутентификации на прокси, предварительно декодировав их. Варианты для Bun и Deno есть в README SDK.

Шаг 4: Node SDK

// npm install openai undici   (reads OPENAI_API_KEY from the environment)
// Save as check.mjs and run: node check.mjs
import OpenAI from 'openai';
import { fetch, ProxyAgent } from 'undici';

// If the password has special characters, wrap it: encodeURIComponent(password)
const dispatcher = new ProxyAgent('http://USERNAME:PASSWORD@HOST:PORT');

// 1) Which IP does the proxy show?
const ip = await fetch('https://ipinfo.io/json', { dispatcher });
console.log(await ip.text());

// 2) The same dispatcher for the API
const client = new OpenAI({ fetch, fetchOptions: { dispatcher } });
for await (const model of client.models.list()) {
  console.log(model.id);
}

// SOCKS5: use this line instead
// const dispatcher = new ProxyAgent('socks5://USERNAME:PASSWORD@HOST:PORT');

// Built-in route for HTTP proxies, Node 22.21+ / 24.5+, no SDK code:
// NODE_USE_ENV_PROXY=1 HTTPS_PROXY="http://USERNAME:PASSWORD@HOST:PORT" node check.mjs

Сохраните как check.mjs. Первый запрос печатает выходной IP, второй выводит список моделей. Для SOCKS5 подставьте закомментированную строку. Последняя закомментированная строка — встроенный способ через переменные окружения для HTTP-прокси (Node 22.21 или 24.5 и новее); на страницах SDK его нет, проверьте его запросом.

Заметки про SOCKS5

Проще всего HTTP: во всех примерах здесь адрес HTTP-прокси, и именно HTTP-прокси описаны в документации Node для переменных окружения. SOCKS5 работает в трёх местах ниже, и IP должен быть куплен именно как SOCKS5, потому что протокол выбирается при покупке, и у IP он только один.

curl принимает socks5:// и socks5h:// в параметре -x (в руководстве указаны оба); в нашем руководстве по Python requests используется socks5h. Python SDK: установите httpx2[socks] и используйте адрес socks5://, как сказано в документации HTTPX2. Node SDK: ProxyAgent в undici обрабатывает адреса socks5:. Встроенная поддержка переменных окружения в Node перечисляет только адреса HTTP и HTTPS.

Заметки про SOCKS5

# SOCKS5 line of the same IP (use the SOCKS5 port from My assets)
curl -x "socks5h://USERNAME:PASSWORD@HOST:PORT" https://ipinfo.io/json

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Моих активов». Используйте порт SOCKS5 и IP, купленный как SOCKS5.

Частые проблемы

403 «Country, region, or territory not supported»

Проверьте Показывает ли ipinfo.io через тот же прокси поддерживаемую страну и действительно ли клиент использует прокси?

Решение Передайте прокси клиенту, который вызывает API, как в шагах 3 и 4, и берите IP в поддерживаемой стране.

407 Proxy Authentication Required

Проверьте Нет ли в пароле неэкранированного спецсимвола и не закончился ли срок аренды IP?

Решение Закодируйте пароль в адресе или заново скопируйте данные из «Моих активов» и проверьте дату окончания.

401 «IP not authorized»

Проверьте Есть ли выходной IP в белом списке, который относится к этому ключу?

Решение Отправляйте запросы с разрешённого IP или обновите белый список в настройках OpenAI.

Node SDK не учитывает HTTPS_PROXY

Проверьте Задано ли NODE_USE_ENV_PROXY=1 и использует ли SDK глобальный fetch?

Решение Задайте dispatcher у клиента, как в шаге 4: это способ из документации.

Ошибки сертификата после обновления Python SDK

Проверьте Есть ли на машине сертификаты CA операционной системы? HTTPX2 сменил хранилище доверия по умолчанию.

Решение Установите сертификаты CA или укажите в SSL_CERT_FILE файл с набором CA. Прокси, подменяющий сертификаты, нужно доверить так же.

Цены и ограничения

Дата-центровый IP стоит US$0,25 за день и US$3,99 за 30 дней, во всех странах одинаково; IP статического ISP — US$7,99 за 30 дней. В одном заказе до 100 IP, бесплатного пробного периода нет. Какой тип выбрать, объяснено на странице «Прокси для OpenAI API».

Вопросы и ответы

Работает ли HTTPS_PROXY с OpenAI SDK?

С curl — да. В Node при NODE_USE_ENV_PROXY=1 на версии со встроенной поддержкой прокси её читает глобальный agent, но на прочитанных нами страницах SDK это не перечислено, поэтому подтвердите первым запросом. В Python прочитанные страницы описывают параметр proxy, а не переменную, так что передавайте proxy= клиенту.

Что выбрать, HTTP или SOCKS5?

HTTP, если нет причины иначе. SOCKS5 работает в curl, в Python SDK с httpx2[socks] и в undici, но не в варианте Node с переменными окружения.

Идёт ли через прокси всё на моём компьютере?

Только настроенный вами клиент; если вы экспортировали переменные окружения, то всё, что запущено из этого терминала.

Заработает ли API из моей страны с прокси?

Нет. Прокси меняет только сетевой выход. Список стран и условия OpenAI остаются в силе.

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

10
  1. OpenAI: поддерживаемые страны и территории

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

    Прочитано 2 ноября 2026: доступ к сервисам OpenAI или его предоставление из мест вне списка может привести к блокировке или приостановке аккаунта; материковый Китай, Гонконг и Россия в списке не значатся.

  2. OpenAI API: коды ошибок

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

    Прочитано 2 ноября 2026: 403 «Country, region, or territory not supported» означает обращение к API из неподдерживаемой страны, региона или территории; 401 «IP not authorized» означает, что IP запроса не совпадает с настроенным белым списком.

  3. OpenAI Python SDK: переход на HTTPX2

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

    Прочитано 2 ноября 2026: в примере прокси задан на клиенте через DefaultHttpx2Client(proxy=...); вспомогательные классы сохраняют рекомендованные SDK таймаут, пул соединений и редиректы; DefaultHttpxClient по-прежнему работает и теперь создаёт клиенты HTTPX2; HTTPX2 меняет хранилище доверия TLS по умолчанию (раньше certifi), в verify можно передать ssl.SSLContext; SSL_CERT_FILE и SSL_CERT_DIR учитываются при trust_env=True (по умолчанию).

    Страница не описывает HTTP_PROXY и HTTPS_PROXY.

  4. Документация HTTPX2: прокси

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

    Прочитано 2 ноября 2026: параметр proxy при создании клиента; логин и пароль в части userinfo адреса прокси; для SOCKS нужны pip install httpx2[socks] и адрес socks5://.

    Страница не описывает переменные окружения с прокси.

  5. OpenAI Node SDK: настройка прокси

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

    Прочитано 2 ноября 2026: в Node импортируйте fetch и ProxyAgent из undici и передайте fetchOptions: { dispatcher }; специфичные для undici опции вроде dispatcher нужно сочетать с соответствующим fetch; в Bun в fetchOptions указывают proxy, в Deno — клиент из Deno.createHttpClient.

    README не упоминает переменные окружения для прокси.

  6. Документация Node.js: HTTP, встроенная поддержка прокси

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

    Прочитано 2 ноября 2026: при NODE_USE_ENV_PROXY=1 или --use-env-proxy глобальный agent строится из переменных HTTP_PROXY, HTTPS_PROXY и NO_PROXY (версии в нижнем регистре приоритетнее); адрес прокси может быть http:// или https://, с логином и паролем; http.setGlobalProxyFromEnv() включает это для fetch() и http.request()/https.request(); функция добавлена в v24.5.0 и v22.21.0, стабильность 1.1 (активная разработка).

    SOCKS5 в этом разделе не упомянут.

  7. Документация undici: ProxyAgent

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

    Прочитано 2 ноября 2026: ProxyAgent направляет запросы через HTTP-, HTTPS- или SOCKS5-прокси; адреса socks5: и socks: обрабатывает Socks5ProxyAgent; заголовок proxy-authorization берётся из логина и пароля в адресе (после URL-декодирования).

    Страница не упоминает переменные окружения.

  8. Руководство curl: -x, --proxy

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

    Прочитано 2 ноября 2026: в строке прокси допустимы socks4://, socks4a://, socks5:// и socks5h://; без схемы или с http:// это HTTP-прокси; логин и пароль в строке прокси URL-декодируются; параметр перекрывает переменные окружения с прокси.

    В прочитанной странице нет объяснения разницы между socks5 и socks5h.

  9. Руководство curl: переменные окружения

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

    Прочитано 2 ноября 2026: curl читает http_proxy, HTTPS_PROXY и ALL_PROXY; NO_PROXY перечисляет хосты без прокси; -x перекрывает переменные окружения.

    На странице http_proxy написана строчными, остальные заглавными.

  10. Факты о продукте Proxy302

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

    Файл фактов о продукте (значения сверены с консолью, бэкендом и прайсом 18–19 октября 2026), прочитано 2 ноября 2026: аренда дата-центровых IP по штукам, US$0,25 за 1 день и US$3,99 за 30 дней, во всех странах одинаково; статический ISP US$7,99 за 30 дней; HTTP или SOCKS5 выбирается при покупке, один протокол на IP; до 100 IP в заказе; бесплатного пробного периода нет.

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

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