Использование прокси в cURL, проверка HTTP и SOCKS5 прокси в командной строке
Это руководство объясняет, как подключиться к HTTP- и SOCKS5-прокси Socks5Proxy через cURL, аутентификацию по логину и паролю, измерение времени ответа и скрипт для проверки всего списка сразу.
Почему полезно тестировать прокси через 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, сравните 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 покажет этапы подключения.
То же самое для 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-кода 407 от прокси после CONNECT указывает на ошибку авторизации. Проверьте имя пользователя и пароль или зарегистрированные IP серверов для IP-авторизации. Если в пароле есть символы @ или :, не включайте их в адрес, а используйте параметры -U или --proxy-user.
Failed to connect или Connection timed out возникают при неверном порте или блокировке исходящих соединений брандмауэром. Убедитесь, что используете HTTP-порт для HTTP и SOCKS5-порт для SOCKS5, а исходящие соединения разрешены. Опция -v покажет этапы подключения для диагностики.