# curl с прокси: синтаксис -x, аутентификация, SOCKS5 и рецепты отладки

Один флаг направляет curl через любой прокси — затем аутентификация, туннели CONNECT, DNS SOCKS5 и переменные окружения решают, будет ли это работать. Все необходимые рецепты, готовые для вставки.

Использование curl с прокси — это один флаг: `-x`. Но между этим флагом и рабочей командой скрапинга находятся пять деталей, которые генерируют большую часть трафика на Stack Overflow по этой теме — синтаксис учетных данных, туннели CONNECT, поведение DNS SOCKS5, переменные окружения, которые тихо перехватывают запросы, и коды ошибок, которые выглядят одинаково, пока вы не прочтете подробный вывод. Это полная справка для копирования и вставки: каждый вариант синтаксиса, каждый метод аутентификации и рецепты, которые вы действительно будете использовать.

## Флаг -x: синтаксис прокси curl

```bash
# route one request through an HTTP proxy
curl -x http://residentialboson.quantumproxies.io:PORT https://ifconfig.me

# identical, long form
curl --proxy http://residentialboson.quantumproxies.io:PORT https://ifconfig.me
```

Два значения по умолчанию, которые стоит знать, прямо из документации curl: если вы опустите схему, curl предполагает HTTP-прокси, а если вы опустите порт, он предполагает 1080 — чисто исторический выбор, который почти не соответствует реальным прокси, поэтому всегда указывайте порт явно. Префикс схемы выбирает протокол прокси: `http://` для стандартного HTTP-прокси, `https://` для шифрования перехода к самому прокси, `socks5://` или `socks5h://` для SOCKS.

## curl proxy authentication: три способа отправки учетных данных

```bash
# 1) credentials inline in the proxy URL
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 https://ifconfig.me

# 2) separate flag -- keeps the URL readable
curl -x http://residentialpremium.quantumproxies.io:8080 -U USER:PASS https://ifconfig.me

# 3) special characters must be percent-encoded (p@ss! -> p%40ss%21)
curl -x "http://USER:p%40ss%21@residentialpremium.quantumproxies.io:8080" https://ifconfig.me
```

`-U` (заглавная) — это аутентификация прокси; строчная `-u` аутентифицируется на целевом сайте — путаница между ними является классической ошибкой. `407 Proxy Authentication Required` всегда означает, что прокси отклонил ваши учетные данные, никогда не целевой сайт. Проверьте наличие опечаток, не закодированных символов или провайдера, ожидающего аутентификацию по IP-белому списку вместо user:pass. С [резидентными прокси QuantumProxies](https://quantumproxies.io/residential-proxies) работают оба режима — добавьте IP вашей машины в белый список и полностью откажитесь от учетных данных или встроите user:pass в URL. Полный список проверки 407 находится в [нашем руководстве по устранению неполадок 407](https://quantumproxies.io/blog/fix-407-proxy-authentication-required).

![curl -x запрашивает у прокси CONNECT ifconfig.me:443, прокси отвечает 200 Connection established, и curl выполняет TLS-рукопожатие с целью через этот туннель. Карточка: TLS работает из конца в конец, прокси лишь пересылает шифротекст, который не может прочитать, а любой ответ, кроме 200, после CONNECT указывает на точку сбоя.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335145/blog/generated/qp-b9-006-diag1.png)
*Для HTTPS-целей curl запрашивает у прокси туннель CONNECT, затем выполняет TLS от конца до конца внутри него — прокси передает байты, которые он не может прочитать.*

## HTTPS-цели и туннель CONNECT

Когда целевой URL — `https://`, curl не просит прокси получить страницу. Он отправляет запрос `CONNECT host:443`, прокси открывает необработанный TCP-туннель, и curl выполняет TLS-рукопожатие непосредственно с целью через него. Именно поэтому HTTP-прокси может передавать HTTPS-трафик, не нарушая шифрование — он пересылает шифрованный текст, который не может прочитать или изменить. В выводе `-v` вы увидите строку `CONNECT`, за которой следует `200 Connection established`; все остальное на этом этапе — это ваша точка отказа. Для не-HTTP-протоколов через HTTP-прокси `-p` (`--proxytunnel`) заставляет вести себя так же, как туннель.

## SOCKS5: один символ меняет, где происходит DNS

```bash
# SOCKS5, hostname resolved on YOUR machine
curl -x socks5://USER:PASS@residentialpremium.quantumproxies.io:1080 https://ifconfig.me

# SOCKS5h, hostname resolved BY THE PROXY -- use this for scraping
curl -x socks5h://USER:PASS@residentialpremium.quantumproxies.io:1080 https://ifconfig.me

# dedicated flag, same as socks5h
curl --socks5-hostname residentialpremium.quantumproxies.io:1080 -U USER:PASS https://ifconfig.me
```

С простым `socks5://` ваша машина выполняет локальный DNS-запрос — целевое имя хоста утечет к вашему локальному резолверу, и вы можете получить IP, который географически не соответствует вашему выходу. `socks5h://` передает разрешение прокси, так что DNS-ответы поступают из сети выхода. Каждый [план QuantumProxies включает SOCKS5](https://quantumproxies.io/socks5-proxies) наряду с HTTP на одном и том же шлюзе. Если вы не уверены, какой протокол нужен данному инструменту, наше [сравнение SOCKS5 и HTTP](https://quantumproxies.io/blog/socks5-vs-http-proxy-difference) объясняет это.

![Две схемы SOCKS5 в curl бок о бок: socks5:// разрешает имя хоста на вашей машине, раскрывая его локальному резолверу и рискуя несоответствием гео, а socks5h:// разрешает DNS на выходе прокси. Карточка рекомендует socks5h:// или --socks5-hostname как вариант по умолчанию для скрейпинга.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335145/blog/generated/qp-b9-006-diag2.png)
*socks5h:// разрешает DNS на выходе — нет утечки локального имени хоста, нет географического несоответствия. Используйте его по умолчанию для скрапинга.*

## Переменные окружения и .curlrc

```bash
# proxy every curl (and most CLI tools) in this shell
export http_proxy="http://USER:PASS@residentialpremium.quantumproxies.io:8080"
export https_proxy="http://USER:PASS@residentialpremium.quantumproxies.io:8080"
export NO_PROXY="localhost,127.0.0.1,.internal.example"

curl https://ifconfig.me                 # proxied automatically
curl --noproxy "*" https://ifconfig.me   # bypass for one call

# permanent default: add to ~/.curlrc
# proxy = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
```

Одна особенность, задокументированная на странице руководства curl, в конечном итоге сбивает с толку всех: переменные могут быть в верхнем или нижнем регистре, и нижний регистр выигрывает, за исключением `http_proxy`, который curl учитывает только в нижнем регистре — `HTTP_PROXY` намеренно игнорируется по соображениям безопасности. В Windows синтаксис `-x` идентичен в cmd и PowerShell; установите переменные с помощью `set http_proxy=...` или `$env:http_proxy="..."`, а файл конфигурации — `%APPDATA%\_curlrc`. Помните, что эти переменные также влияют на другие инструменты — забытый экспорт в CI является классическим источником загадочного трафика.

## Отладка с помощью -v: читайте рукопожатие, а не гадание на кофейной гуще

Добавьте `-v`, и curl расскажет всю беседу с прокси. Сопоставьте то, что вы видите, с причиной:

- `Connected to residentialpremium.quantumproxies.io` — вы достигли прокси; любая ошибка после этого — это аутентификация или проблема на стороне цели.
- `curl: (7) Failed to connect` — неверный хост/порт, неработающий прокси или брандмауэр, блокирующий порт до того, как прокси ответит.
- `407 Proxy Authentication Required` — учетные данные отсутствуют, неверны или в URL содержатся незакодированные специальные символы.
- `curl: (56) CONNECT aborted` — прокси отказал в туннеле, обычно потому, что целевой порт не разрешен (большинство прокси разрешают 443 и мало что еще).
- Туннель открывается, но сайт возвращает 403 — это цель блокирует вас, а не прокси; протестируйте выход с помощью [бесплатного проверщика качества IP](https://quantumproxies.io/ip-checker) и посмотрите [почему curl получает 403, а браузер проходит](https://quantumproxies.io/blog/curl-403-but-browser-works).

## Проверьте прокси, прежде чем доверять ему

Две проверки по тридцать секунд сэкономят часы путаной отладки позже. Во-первых, подтвердите анонимность: обратитесь к `https://httpbin.org/headers` через прокси и проверьте, что на самом деле получает цель — чистый шлюз не добавляет заголовки `Via` или `X-Forwarded-For`, которые рекламировали бы проксирование, в то время как дешевые или бесплатные прокси часто добавляют оба. Во-вторых, измерьте накладные расходы с помощью переменных времени `-w` (рецепт ниже): резидентный переход обычно добавляет несколько сотен миллисекунд по сравнению с прямым запросом, что нормально; многосекундные времена подключения означают перегруженный выход, от которого стоит отказаться. Включите обе проверки в CI для любого конвейера, который зависит от прокси, и вы поймаете неправильно настроенную конечную точку, прежде чем она тихо сожжет запуск скрапинга — или ваш бюджет на пропускную способность, поскольку счета за использование выставляются за гигабайт, независимо от того, были ли ответы полезными или нет.

## Быстрые рецепты

```bash
# confirm the exit IP
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 https://ifconfig.me

# geo-target: choose the exit country in the username
curl -x "http://USER-country-de:PASS@residentialpremium.quantumproxies.io:8080" https://ifconfig.me

# sticky session: keep the same exit IP across calls
curl -x "http://USER-sid-a1b2c3-ttl-30m:PASS@residentialpremium.quantumproxies.io:8080" https://example.com

# POST JSON through the proxy
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 \
  -H "Content-Type: application/json" -d '{"q":"test"}' https://httpbin.org/post

# fetch a page: follow redirects, browser UA, save to file
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 -L -A "Mozilla/5.0" \
  -o page.html https://example.com

# measure the proxy overhead
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 -s -o /dev/null \
  -w "connect: %{time_connect}s  total: %{time_total}s\n" https://example.com
```

Трюки с суффиксом имени пользователя работают, потому что шлюз анализирует таргетинг из учетных данных: выбор страны из более чем 200 местоположений, ротация по запросу по умолчанию, липкие сессии, когда потоку нужна одна идентичность. Когда ваши однострочники превращаются в скрипт, та же конечная точка легко интегрируется в Python — наше [руководство по прокси для Python Requests](https://quantumproxies.io/blog/python-requests-proxy-guide) продолжает ровно там, где заканчивается curl.

## Часто задаваемые вопросы

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

Передайте его в `-x` с схемой SOCKS: `curl -x socks5h://user:pass@host:port https://target`. Предпочитайте `socks5h://` вместо `socks5://`, чтобы DNS разрешался на прокси, а не на вашей машине. Старые флаги `--socks5` и `--socks5-hostname` все еще работают и делают то же самое.

### Как сделать так, чтобы curl игнорировал прокси?

Для одного запроса добавьте `--noproxy "*"`. Для оболочки отмените установку `http_proxy` и `https_proxy`. Чтобы навсегда исключить определенные хосты, перечислите их в `NO_PROXY` в виде доменов, разделенных запятыми. Если curl использует прокси, когда вы его не просили, почти наверняка виновата переменная окружения или строка в `~/.curlrc`.

### Почему curl возвращает 407 Proxy Authentication Required?

Прокси отклонил ваши учетные данные. Проверьте пользователя и пароль, убедитесь, что вы использовали `-U` (не `-u`, который нацелен на сайт), и закодируйте специальные символы, такие как `@` или `!`. Если ваш провайдер аутентифицирует по IP-белому списку, авторизуйте IP вашей машины в панели управления и не отправляйте никаких учетных данных вообще.

### Работает ли синтаксис прокси curl на Windows?

Да — `-x`, `-U` и схемы SOCKS идентичны, так как curl поставляется с Windows 10 и позже. Различие только в окружении: установите переменные с помощью `set` в cmd или `$env:` в PowerShell, и используйте `%APPDATA%\_curlrc` вместо `~/.curlrc` для постоянных настроек.

### Как установить постоянный прокси для curl?

Добавьте строку `proxy = "http://user:pass@host:port"` в `~/.curlrc` (или `_curlrc` на Windows), и каждый вызов curl будет его использовать. В качестве альтернативы, экспортируйте `http_proxy` и `https_proxy` из профиля вашей оболочки, чтобы охватить и другие инструменты. Командная строка `-x` всегда переопределяет оба, так что одноразовые исключения остаются простыми.

Это вся поверхность: `-x` плюс схема, правильно закодированные учетные данные, `socks5h`, когда вы используете SOCKS, переменные окружения, которые вы устанавливаете намеренно, и `-v`, когда что-то ведет себя неправильно. Команды выше работают как есть с любым шлюзом — сочетайте их с чистыми резидентными выходами, и curl станет действительно мощным инструментом для скрапинга.

[Протестируйте эти рецепты на резидентных прокси QuantumProxies](https://quantumproxies.io/residential-proxies)
