Чтобы использовать прокси с Curl, вы должны передать требуемый адрес прокси с помощью опции командной строки -x (или --proxy) и учетные данные прокси с помощью ключа командной строки -U (или --proxy-user). Учетные данные прокси также могут быть переданы в строке прокси и будут декодированы Curl по URL. Строка прокси может иметь префикс protocol: //, например, http:// или socks5://. Если протокол не указан, Curl по умолчанию использует http://. Если в строке прокси не указан номер порта, Curl по умолчанию примет значение 1080.
1 | curl https://example.com/echo -x myproxy.com:8080 -U login:password |
Пример использование Curl с прокси-сервером
Что такое Curl?
Что такое прокси-сервер?
Прокси-сервер - это промежуточный сервер (программный или аппаратный) между пользователем (браузером, мобильным приложением и т. д.) и веб-сайтом, который передает трафик между ними. Прокси-серверы отделяют конечных пользователей от веб-сайтов, которые они просматривают, и обеспечивают несколько уровней функциональности и безопасности. Например, прокси-серверы могут сжимать и шифровать сетевой трафик, предотвращать проникновение в локальную сеть из Интернета и контролировать использование Интернета сотрудниками в рабочее время. Слово "прокси" означает "действовать от имени другого", а прокси-сервер действует от имени конечного пользователя. При использовании прокси-серверов все запросы в Интернет сначала поступают на прокси-сервер, который оценивает запрос, применяет к нему набор правил, а затем, при необходимости, пересылает запрос в Интернет. Аналогично, ответы сервера сначала возвращаются на прокси-сервер, который оценивает и обрабатывает их перед отправкой конечному пользователю. В некоторых случаях для обеспечения большей анонимности в Интернете используется цепочка прокси-серверов.
Поддерживает ли Curl прокси-серверы?
Да, Curl поддерживает прокси-серверы с помощью опции командной строки -x или --proxy. Рекомендуется заключить адрес прокси-сервера в двойные кавычки, чтобы корректно обрабатывать специальные символы в URL. Обратите внимание, что прокси-протокол по умолчанию для Curl - HTTP.
Синтаксис запроса прокси-сервера Curl
Общий вид команды Curl для отправки запроса через прокси-сервер выглядит следующим образом:
1 | curl -x "[protocol://][host][:port]" [URL] [options] |
Передача адреса прокси в Curl через переменные окружения
Другой способ передать Curl адрес прокси - установить переменные окружения http_proxy и https_proxy. Использование этих переменных окружения будет иметь тот же эффект, что и использование опции командной строки -x --proxy. Только имейте в виду, что опции командной строки более мощные и переопределяют параметры, заданные через переменные окружения.
1 2 | export http_proxy="[protocol://][host][:port]" export https_proxy="[protocol://][host][:port]" |
Чтобы отключить глобальные настройки прокси, снимите эти две переменные окружения.
1 2 | unset http_proxy unset https_proxy |
Что такое переменная среды?
Переменная среды - это пара ключ=значение, которая задается на системном уровне и может влиять на поведение всех запущенных процессов на компьютере. Переменные окружения - это часть операционной системы, в которой выполняется процесс. Впервые переменные окружения появились в 1979 году в Unix, а сейчас поддерживаются всеми операционными системами, включая Linux, macOS и Windows.
Как обойти ошибки SSL-сертификата при использовании Curl Proxy?
Если Curl получает ошибку SSL-сертификата, он автоматически блокирует запрос. В целях отладки, чтобы разрешить небезопасные соединения с сервером, вы можете указать Curl игнорировать ошибки SSL-сертификата, добавив в запрос curl параметр командной строки -k.
1 | curl -x "[protocol://][host][:port]" -k [URL] |
Как заставить Curl использовать прокси-сервер через файл .curlrc?
Чтобы не передавать адрес прокси при каждом запуске команды Curl, вы можете создать файл конфигурации Curl (.curlrc), содержащий множество параметров конфигурации, и поместить его в домашний каталог пользователя. При следующем запуске Curl будет искать файл ~/.curlrc, и если он его найдет, то загрузит указанные параметры из файла конфигурации. Чтобы передать адрес прокси через файл конфигурации, создайте файл .curlrc в домашнем каталоге и введите адрес прокси следующим образом:
1 2 | # --- Файл примера --- proxy = "[protocol://][host][:port]" |
Как игнорировать прокси для одного запроса Curl?
Предположим, что прокси задан глобально через переменную окружения или файл .curlrc. В этом случае вы все равно можете обойти его для определенных запросов Curl, используя параметр командной строки -noproxy "*" в запросе Curl.
1 | curl --noproxy "*" https://example.com/echo |
Что такое SOCKS-прокси?
SOCKS (Socket Secure) - это протокол сетевого взаимодействия, который направляет любой трафик, генерируемый приложением, на реальный сервер от имени клиента. Прокси-сервер SOCKS создает соединение Transmission Control Protocol (TCP) с другим сервером и обменивается сетевыми пакетами между клиентом и сервером. SOCKS может обрабатывать несколько типов запросов и прозрачно передавать данные для потоков HTTP, HTTPS, POP3, SMTP, FTP и SFTP. Существует всего две версии протокола SOCKS: SOCKS4 и SOCKS5. Основными отличиями SOCKS5 от SOCKS4 являются:
- SOCKS5 поддерживает несколько методов аутентификации; SOCKS4 не поддерживает аутентификацию;
- SOCKS5 поддерживает UDP-прокси; SOCKS4 не поддерживает UDP-прокси;
- SOCKS5 более безопасен, поскольку использует аутентифицированные TCP-соединения и зашифрованные SSH-туннели;
Синтаксис SOCKS-прокси Curl
1 | curl -x "[socks5://][host][:port]" [URL] [options] |
Для SOCKS-прокси Curl вместо -x можно использовать параметр командной строки -socks5.
1 | curl --socks5 "[host][:port]" [URL] [options] |
Что такое прокси-авторизация?
Авторизация прокси-сервера - это встроенный механизм HTTP, называемый аутентификацией прокси-сервера, который предотвращает несанкционированное использование прокси-сервера и блокирует запросы клиентов к прокси-серверу до тех пор, пока пользователь не предоставит действительные учетные данные для доступа к прокси-серверу. Авторизация прокси-сервера осуществляется путем отправки клиентом на прокси-сервер заголовка HTTP-запроса Proxy-Authorization.
1 | Proxy-Authorization: [type] [credentials] Proxy-Authorization: Basic bG9naW46cGFzc3dvcmQ= |
Как указать имя пользователя и пароль прокси для Curl?
Если ваш прокси требует аутентификации пользователя, вы можете передать Curl имя пользователя и пароль с помощью ключа командной строки -U или --proxy-user.
1 | curl -x "[protocol://][host][:port]" [URL] -U login:password |