Socks5Proxy

Использование прокси в 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 покажет этапы подключения для диагностики.

Использование прокси в cURL, проверка соединения с -x и SOCKS5 | Socks5Proxy