Використання проксі в cURL: перевірка HTTP та SOCKS5 проксі у командному рядку
Цей посібник пояснює, як підключитися до HTTP- та SOCKS5-проксі Socks5Proxy через cURL, використовуючи аутентифікацію за логіном та паролем, як виміряти час відповіді та перевірити весь список IP за допомогою shell-скрипту.
Чому корисно тестувати проксі через cURL?
cURL встановлений майже на всіх серверах та середовищах розробки, що робить його найшвидшим способом перевірити роботу проксі. Якщо виникають проблеми в коді чи налаштуваннях браузера, cURL допомагає швидко визначити, чи проблема в проксі.
У прикладі використовується IP 198.51.100.23, HTTP порт 8000, SOCKS5 порт 1080, ім'я користувача spx_user, пароль spx_pass.
Як підключитися до HTTP проксі?
Додайте адресу проксі до опції -x (або --proxy). Ім'я користувача та пароль можна додати безпосередньо до адреси або вказати окремо за допомогою опції -U. При запиті HTTPS-адреси cURL створює тунель CONNECT і виконує запит у зашифрованому вигляді.
# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org
# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.orgЯк підключитися до проксі SOCKS5?
--socks5-hostname виконує розв'язання доменних імен через проксі. DNS-запити вашого сервера не видно ззовні, і імена розв'язуються відповідно до країни проксі. --socks5 розв'язує імена на вашому сервері та надсилає лише IP через проксі. У більшості випадків рекомендується --socks5-hostname.
Формат socks5h:// у -x дає той самий результат.
# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org
# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.orgЯк перевірити час відповіді та статус разом?
Опція -w дозволяє вивести час підключення, час до першого байта, загальний час та код відповіді в один рядок. Це корисно для порівняння швидкості проксі з різних країн або визначення, чи повільний цільовий сайт чи проксі.
Використовуйте -o /dev/null, щоб відкинути тіло відповіді, та -s, щоб приховати індикатор прогресу, і отримаєте чистий результат.
curl -s -o /dev/null \
-x http://spx_user:spx_pass@198.51.100.23:8000 \
-w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
https://example.com/Як перевірити весь список одразу?
Отримавши список через API, ви можете запустити cURL для кожного рядка, щоб одночасно перевірити статус усіх проксі. Цей скрипт отримує список у форматі ip:port:user:pass і виводить IP відповіді та час виконання для кожного рядка. Встановлено тайм-аут, щоб уникнути зависання на рядках без відповіді.
#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
"https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt
while IFS=: read -r ip port user pass; do
out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
echo "$ip:$port $out"
done < proxies.txtЧи можна викликати API через cURL?
Так. Перевірка балансу, список активних планів та список проксі доступні з одним заголовком Authorization: Bearer. Відповіді у форматі JSON можна фільтрувати за допомогою інструментів на кшталт jq.
curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"Чи можна налаштувати проксі через змінні середовища?
Так. cURL та багато інших командних інструментів читають змінні середовища http_proxy, https_proxy та all_proxy. Налаштувавши їх у терміналі, ви змусите cURL, wget, pip та інші інструменти використовувати вказаний проксі. Для SOCKS5 вкажіть адресу у форматі socks5h:// у all_proxy.
Додайте адреси, які не повинні використовувати проксі, у no_proxy через кому. Це запобігає використанню проксі для внутрішніх серверів або localhost.
export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org
# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"Як порівняти результати роботи HTTP проксі та SOCKS5?
Якщо надсилати запити на ту саму адресу через два порти одного IP і порівнювати час відповіді, можна дізнатися, який спосіб швидший у вашому середовищі. У більшості випадків різниця незначна, але якщо сервер далеко або DNS-запити повільні, різниця може бути помітною.
IP відповіді має бути однаковим для обох методів. Якщо вони різні, це може означати, що ви випадково використовуєте порти з інших рядків, тому перевірте список ще раз.
for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
curl -s -m 15 -x "$p" -w " %{time_total}s\n" https://api.ipify.org
doneЯк сервер перевіряє IP для IP авторизації?
Для IP-авторизації вкажіть публічну IPv4-адресу вашого сервера. Ви можете перевірити її, виконавши curl -4 https://api.ipify.org без проксі. Додайте цю адресу в поле IP-авторизації на панелі керування, щоб підключатися без імені користувача та пароля.
curl -4 -s https://api.ipify.orgЧи може проксі переглядати вміст HTTPS сайтів?
При запиті HTTPS через HTTP проксі cURL спочатку створює CONNECT тунель до цільового сервера, а потім встановлює зашифроване з'єднання безпосередньо з ним. Проксі знає лише, до якого сервера підключається, але не бачить вмісту через шифрування. Опція -v покаже процес CONNECT та подальше зашифроване з'єднання.
Те саме стосується SOCKS5. Проксі лише перенаправляє з'єднання, а шифрування відбувається між cURL та цільовим сервером. Тому безпечніше не використовувати опцію -k (перевірка сертифіката), оскільки навіть через проксі сертифікат цільового сервера перевіряється як звичайно.
Використовуючи --socks5-hostname, доменні імена також розв'язуються через проксі, тому ваші DNS-запити не залишають слідів у журналах сервера.
curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"Як читати повідомлення про помилки cURL?
Помилка HTTP code 407 від проксі після CONNECT означає невдалу авторизацію. Перевірте ім’я користувача та пароль або зареєстровані IP сервера для IP авторизації. Якщо пароль містить @ або :, не додавайте його до адреси, а використовуйте -U або --proxy-user.
Failed to connect або Connection timed out виникають через неправильний порт або блокування вихідних з'єднань фаєрволом сервера. Використовуйте HTTP порт для HTTP адрес, SOCKS5 порт для SOCKS5, і перевірте, чи відкриті вихідні порти. Опція -v покаже процес підключення покроково, що допоможе знайти причину.