Використання проксі з cURL передбачає вказання адреси та порту проксі-сервера за допомогою опції командного рядка -x або --proxy, що дозволяє маршрутизувати запити cURL через проміжний сервер.
Ця стаття детально описує різні методи та опції командного рядка, доступні в cURL для взаємодії з проксі-сервісами, охоплюючи базові HTTP/HTTPS проксі, проксі з автентифікацією, SOCKS проксі та конфігурацію через змінні середовища.
Базова конфігурація проксі
Найпоширеніший метод вказати cURL використовувати проксі — це опція -x або --proxy, за якою слідує адреса та порт проксі-сервера.
HTTP/HTTPS проксі
Щоб маршрутизувати HTTP або HTTPS запит через HTTP/HTTPS проксі, вкажіть адресу та порт проксі.
Синтаксис:
curl -x [protocol://][user:password@]proxyhost[:port] [URL]
Приклади:
-
Використання HTTP проксі для HTTP призначення:
bash curl -x http://your.proxy.server:8080 http://example.com
Ця команда наказує cURL надсилати запит дляhttp://example.comчерезyour.proxy.serverна порт8080за допомогою протоколу HTTP проксі. -
Використання HTTP проксі для HTTPS призначення:
bash curl -x http://your.proxy.server:8080 https://secure.example.com
При проксіюванні HTTPS призначення через HTTP проксі, cURL зазвичай використовує методCONNECTдля встановлення тунелю через проксі до сервера призначення. Потім SSL/TLS рукостискання відбувається безпосередньо між cURL таsecure.example.com, не залучаючи HTTP проксі до шифрування. -
Використання HTTPS проксі для HTTP призначення:
bash curl -x https://your.secure.proxy.server:8443 http://example.com
Це маршрутизує запит через проксі, який сам використовує HTTPS. З'єднання між cURL таyour.secure.proxy.serverє зашифрованим.
Проксі з автентифікацією
Багато проксі-сервісів вимагають автентифікації. cURL підтримує різні методи автентифікації для проксі, головним чином Basic, NTLM та Digest.
Базова автентифікація
Для проксі, що вимагають ім'я користувача та пароль, використовуйте опцію --proxy-user або вбудуйте облікові дані безпосередньо в URL проксі.
Синтаксис:
curl -x [protocol://]proxyhost[:port] --proxy-user "username:password" [URL]
curl -x [protocol://]username:password@proxyhost[:port] [URL]
Приклади:
-
Використання
--proxy-user:
bash curl -x http://your.proxy.server:8080 --proxy-user "proxyuser:proxypass" http://example.com -
Вбудовування облікових даних в URL:
bash curl -x http://proxyuser:proxypass@your.proxy.server:8080 http://example.com
URL-кодування спеціальних символів в імені користувача або паролі є обов'язковим, якщо вони присутні. Наприклад, парольp@sswordмає бутиp%40ssword.
Інші методи автентифікації
Хоча базова автентифікація є поширеною, cURL підтримує інші методи для специфічних середовищ.
--proxy-ntlm: Вмикає NTLM автентифікацію для проксі.--proxy-digest: Вмикає Digest автентифікацію для проксі.
Приклад (NTLM):
curl -x http://your.proxy.server:8080 --proxy-ntlm --proxy-user "DOMAIN\proxyuser:proxypass" http://example.com
SOCKS проксі
SOCKS (Socket Secure) проксі працюють на нижчому рівні, ніж HTTP проксі, обробляючи різні мережеві протоколи. cURL підтримує SOCKS4, SOCKS4a та SOCKS5.
SOCKS5 проксі
SOCKS5 є найуніверсальнішим протоколом SOCKS, що підтримує IPv4, IPv6, UDP та автентифікацію.
Синтаксис:
curl --socks5 [user:password@]proxyhost[:port] [URL]
Приклади:
-
Базовий SOCKS5 проксі:
bash curl --socks5 your.socks5.server:1080 http://example.com
За замовчуванням cURL розв'язує ім'я хостаexample.comлокально, перш ніж відправити IP-адресу SOCKS5 проксі. -
SOCKS5 проксі з віддаленим розв'язанням DNS:
bash curl --socks5-hostname your.socks5.server:1080 http://example.com
Опція--socks5-hostnameнаказує cURL відправити ім'я хостаexample.comSOCKS5 проксі, дозволяючи проксі виконати розв'язання DNS. Це має вирішальне значення для анонімності та обходу гео-обмежень, де локальне розв'язання DNS може розкрити ваше місцезнаходження. -
SOCKS5 проксі з автентифікацією:
bash curl --socks5-hostname socksuser:sockspass@your.socks5.server:1080 http://example.com
SOCKS4/SOCKS4a проксі
SOCKS4 — це старіший протокол, переважно для IPv4, і не підтримує автентифікацію. SOCKS4a розширює SOCKS4, дозволяючи проксі розв'язувати імена хостів.
Синтаксис:
curl --socks4 proxyhost[:port] [URL]
curl --socks4a proxyhost[:port] [URL]
Приклад (SOCKS4a):
curl --socks4a your.socks4.server:1080 http://example.com
Подібно до --socks5-hostname, --socks4a забезпечує розв'язання проксі імені хоста призначення.
Проксіювання HTTPS призначень з SSL/TLS
Коли cURL проксіює HTTPS запит через HTTP проксі, він ініціює CONNECT запит до проксі. Потім проксі встановлює TCP тунель до цільового HTTPS сервера. cURL виконує SSL/TLS рукостискання безпосередньо з сервером призначення через цей тунель.
Перевірка SSL сертифіката
За замовчуванням cURL перевіряє SSL сертифікат сервера призначення. Якщо сертифікат недійсний, прострочений або самопідписаний, cURL перерве з'єднання.
-
--insecureабо-k: Вимикає перевірку SSL сертифіката. Використовуйте з обережністю, переважно для тестування або відомих довірених середовищ із самопідписаними сертифікатами.
bash curl -x http://your.proxy.server:8080 https://self-signed.example.com -k -
--cacert [file]: Вказує користувацький пакет CA сертифікатів для перевірки.
bash curl -x http://your.proxy.server:8080 https://secure.example.com --cacert /path/to/custom_ca.pem
Змінні середовища для конфігурації проксі
cURL також може отримувати налаштування проксі зі змінних середовища. Це корисно для системних або сесійних конфігурацій проксі без вказання опції -x для кожної команди.
Поширені змінні середовища
http_proxy: Проксі для HTTP запитів.https_proxy: Проксі для HTTPS запитів.all_proxy: Резервний проксі для всіх протоколів, якщоhttp_proxyабоhttps_proxyне встановлені.no_proxy: Список імен хостів, доменів або IP-адрес, розділених комами, які повинні обходити проксі.
Синтаксис:
export http_proxy="http://your.proxy.server:8080"
export https_proxy="http://your.proxy.server:8080" # Примітка: часто HTTP проксі використовується для HTTPS призначень
export no_proxy="localhost,127.0.0.1,.localdomain"
Приклади:
-
Встановлення HTTP проксі:
bash export http_proxy="http://proxyuser:proxypass@your.proxy.server:8080" curl http://example.com -
Встановлення HTTPS проксі (через HTTP проксі):
bash export https_proxy="http://your.proxy.server:8080" curl https://secure.example.com -
Обхід проксі для конкретних хостів:
bash export http_proxy="http://your.proxy.server:8080" export no_proxy="internal.example.com" curl http://internal.example.com # Цей запит обійде проксі curl http://external.example.com # Цей запит використовуватиме проксі
Пріоритет
Опції командного рядка мають пріоритет над змінними середовища. Якщо вказано -x, він перевизначає будь-які змінні середовища http_proxy, https_proxy або all_proxy.
Усунення несправностей підключень до проксі
При виникненні проблем з cURL та проксі, кілька опцій можуть допомогти в діагностиці.
-
--verboseабо-v: Надає детальну інформацію про запит та відповідь, включаючи спроби підключення до проксі, заголовки та узгодження SSL/TLS. Це часто є першим кроком у налагодженні.
bash curl -v -x http://your.proxy.server:8080 http://example.com -
--trace [file]: Виводить повний трасування всіх вхідних та вихідних даних, включаючи заголовки та тіло, у вказаний файл.
bash curl --trace debug.log -x http://your.proxy.server:8080 http://example.com -
Журнали проксі-сервера: Перевірте журнали вашого проксі-сервера на наявність спроб підключення, помилок автентифікації або повідомлень про помилки, пов'язаних з вашими запитами cURL.
-
Мережеве підключення: Переконайтеся, що машина, на якій працює cURL, може досягти проксі-сервера на вказаному порту за допомогою таких інструментів, як
ping,telnetабоnetcat.
bash telnet your.proxy.server 8080
Успішне з'єднанняtelnetвказує на базову мережеву доступність.
Порівняння ключових опцій проксі
| Опція cURL | Опис | Протоколи | Автентифікація | Розв'язання DNS |
|---|---|---|---|---|
-x, --proxy |
Загальна специфікація проксі (HTTP/HTTPS проксі) | HTTP, HTTPS | Так | Локальне |
--proxy-user |
Вказує ім'я користувача та пароль для автентифікації проксі | HTTP, HTTPS | Так | Н/Д |
--socks5 |
SOCKS5 проксі, локальне розв'язання DNS за замовчуванням | Усі | Так | Локальне |
--socks5-hostname |
SOCKS5 проксі, віддалене розв'язання DNS | Усі | Так | Віддалене (проксі) |
--socks4 |
SOCKS4 проксі, локальне розв'язання DNS | Усі | Ні | Локальне |
--socks4a |
SOCKS4a проксі, віддалене розв'язання DNS | Усі | Ні | Віддалене (проксі) |
http_proxy (змінна) |
Змінна середовища для HTTP проксі | HTTP | Так | Локальне |
https_proxy (змінна) |
Змінна середовища для HTTPS проксі (часто HTTP проксі для тунелювання) | HTTPS | Так | Локальне |
all_proxy (змінна) |
Змінна середовища для всіх протоколів, якщо інші не встановлені | Усі | Так | Локальне |
no_proxy (змінна) |
Змінна середовища для вказівки хостів, які повинні обходити проксі | Н/Д | Н/Д | Н/Д |