Команда в одну строку#
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#
# Имя хоста разрешается на выходном узле (рекомендуется)
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 — от целевого сайта. На странице ошибок объяснён каждый код шлюза.
Ротация сессий в цикле#
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.