Интеграции · Начальный

cURL через прокси: все важные параметры с примерами

cURL — самый быстрый способ проверить работу прокси и эталон, которому следуют остальные библиотеки. Освойте пять параметров прокси, и вы сможете диагностировать любой клиент.

2 минуты чтения 6 разделов Обновлено Опубликовано

Команда в одну строку#

Первый запрос
curl -x http://USER-cc-us:[email protected]:9000 https://api.ipify.org

-x (или --proxy) принимает URL прокси со встроенными учётными данными. cURL автоматически создаёт туннель CONNECT к целям HTTPS и поручает прокси разрешить имя хоста.

Полезные параметры#

ПараметрНазначение
-x, --proxy URLПрокси: схема, хост, порт и необязательные учётные данные
-U, --proxy-user user:passУчётные данные отдельно — удобно, если пароль содержит специальные символы
--proxy-basicПринудительная базовая аутентификация прокси (используется по умолчанию, если указан пароль)
-vПоказать обмен CONNECT, коды состояния прокси и заголовки ответа
--noproxy '*'Игнорировать переменные окружения прокси для этого вызова
-w '%{time_total}\n'Вывести время выполнения для сравнения выходных узлов

SOCKS5 и удалённое разрешение DNS#

socks5h
# Имя хоста разрешается на выходном узле (рекомендуется)
curl -x socks5h://USER-cc-de:[email protected]:9001 https://api.ipify.org

# Имя хоста разрешается локально, затем IP-адрес передаётся прокси (раскрывает DNS-запрос)
curl -x socks5://USER-cc-de:[email protected]:9001 https://api.ipify.org

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

Инструменты, которые вызывают cURL через оболочку, и многие другие программы учитывают http_proxy, https_proxy и no_proxy. Экспортируйте их один раз на весь рабочий сеанс.

Оболочка
export https_proxy="http://USER-cc-us:[email protected]:9000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org   # направляется через прокси без -x

Разбор ошибки#

Подробный вывод
curl -v -x http://USER:[email protected]:9000 https://api.ipify.org 2>&1 | grep -E "CONNECT|HTTP/1.1 4|HTTP/1.1 5"
# < HTTP/1.1 407 Proxy Authentication Required  -> учётные данные
# < HTTP/1.1 400 Bad Request                    -> неверный параметр имени пользователя
# < HTTP/1.1 502 Bad Gateway                    -> нет выходного узла для этого местоположения; расширьте географию поиска

Код состояния в строке CONNECT поступает от шлюза, а код после Connection established — от целевого сайта. На странице ошибок объяснён каждый код шлюза.

Ротация сессий в цикле#

Bash
for i in $(seq 1 5); do
  curl -s -x "http://USER-cc-us-sid-run$i-ttl-5m:[email protected]:9000" https://api.ipify.org
  echo
done   # пять разных выходных узлов в США, каждый можно повторно использовать пять минут по его идентификатору

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

Нужен ли cURL специальный параметр для HTTPS через прокси?

Нет. При URL прокси с http:// cURL автоматически отправляет CONNECT для целей https://; параметр --proxytunnel нужен только для принудительного туннелирования обычного HTTP.

Мой пароль содержит @ или :, и cURL выдаёт ошибку.

Передайте учётные данные через -U user:pass вместо их включения в URL или закодируйте специальные символы в формате URL.

Можно начинать

Попробуйте на практике.

Создайте аккаунт, пополните баланс на $20 и вставьте конечную точку из этого руководства в свой инструмент. Срок действия оплаченного трафика не ограничен.