Как вызывать 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.
Выполните три команды на машине, с которой будут идти вызовы. Первая должна показать купленную страну. Вторая печатает код ответа: 403 — страна не поддерживается; любой другой код, например 401 из-за отсутствия ключа, значит, что дело не в стране (страница OpenAI с кодами ошибок не описывает запросы без ключа, это наше толкование). Третья выводит список моделей с вашим ключом и доказывает, что ключ работает через прокси.
# 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 значениями из «Моих активов». Третий вызов только выводит список моделей, так что это безопасная первая проверка ключа.
Многие программы читают 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, или подтвердите проверкой.
Современные версии OpenAI Python SDK построены на HTTPX2. DefaultHttpx2Client сохраняет рекомендованные SDK значения таймаута, пула соединений и редиректов и добавляет прокси; старое имя DefaultHttpxClient тоже работает. Тот же клиент может запросить ipinfo.io, поэтому первая выведенная строка показывает именно тот выход, который использует 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://.
Такая настройка описана в документации OpenAI Node SDK: импортируйте fetch и ProxyAgent из undici и передайте клиенту fetch из undici, а агент — в fetchOptions.dispatcher. SDK подчёркивает, что опции undici вроде dispatcher нужно сочетать с соответствующим fetch, так что не смешивайте ProxyAgent из undici с другим fetch. undici отправляет логин и пароль из адреса как данные для аутентификации на прокси, предварительно декодировав их. Варианты для Bun и Deno есть в README 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 его нет, проверьте его запросом.
Проще всего 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.
Проверьте Показывает ли 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».
С 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 остаются в силе.
Россия не входит в список стран OpenAI API. Фиксированный дата-центровый IP в поддерживаемой стране: прокси в Python или Node SDK и постоянный адрес для белого списка IP.
Как за 30 секунд проверить IP, страну и провайдера прокси, почему сервисы расходятся в городе и что значит «чистота» IP. С нашей проверкой трёх сервисов.
Прочитано 2 ноября 2026: доступ к сервисам OpenAI или его предоставление из мест вне списка может привести к блокировке или приостановке аккаунта; материковый Китай, Гонконг и Россия в списке не значатся.
Прочитано 2 ноября 2026: 403 «Country, region, or territory not supported» означает обращение к API из неподдерживаемой страны, региона или территории; 401 «IP not authorized» означает, что IP запроса не совпадает с настроенным белым списком.
Прочитано 2 ноября 2026: в примере прокси задан на клиенте через DefaultHttpx2Client(proxy=...); вспомогательные классы сохраняют рекомендованные SDK таймаут, пул соединений и редиректы; DefaultHttpxClient по-прежнему работает и теперь создаёт клиенты HTTPX2; HTTPX2 меняет хранилище доверия TLS по умолчанию (раньше certifi), в verify можно передать ssl.SSLContext; SSL_CERT_FILE и SSL_CERT_DIR учитываются при trust_env=True (по умолчанию).
Прочитано 2 ноября 2026: параметр proxy при создании клиента; логин и пароль в части userinfo адреса прокси; для SOCKS нужны pip install httpx2[socks] и адрес socks5://.
Страница не описывает переменные окружения с прокси.
Прочитано 2 ноября 2026: в Node импортируйте fetch и ProxyAgent из undici и передайте fetchOptions: { dispatcher }; специфичные для undici опции вроде dispatcher нужно сочетать с соответствующим fetch; в Bun в fetchOptions указывают proxy, в Deno — клиент из Deno.createHttpClient.
README не упоминает переменные окружения для прокси.
Прочитано 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 (активная разработка).
Прочитано 2 ноября 2026: ProxyAgent направляет запросы через HTTP-, HTTPS- или SOCKS5-прокси; адреса socks5: и socks: обрабатывает Socks5ProxyAgent; заголовок proxy-authorization берётся из логина и пароля в адресе (после URL-декодирования).
Прочитано 2 ноября 2026: в строке прокси допустимы socks4://, socks4a://, socks5:// и socks5h://; без схемы или с http:// это HTTP-прокси; логин и пароль в строке прокси URL-декодируются; параметр перекрывает переменные окружения с прокси.
В прочитанной странице нет объяснения разницы между socks5 и socks5h.
Прочитано 2 ноября 2026: curl читает http_proxy, HTTPS_PROXY и ALL_PROXY; NO_PROXY перечисляет хосты без прокси; -x перекрывает переменные окружения.
На странице http_proxy написана строчными, остальные заглавными.
Факты о продукте 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 — настроить его в браузере можно за несколько минут.