cURL — стандартный инструмент для HTTP-запросов в командной строке, и использование прокси с cURL — это базовый навык для любого backend-инженера, DevOps-специалиста и автоматизатора. Независимо от того, собираете ли вы SERP-данные, мониторите цены или тестируете гео-зависимый контент, правильная настройка curl proxy определяет, пройдёт ли запрос или будет заблокирован. Это руководство показывает, как подключить residential-прокси ProxyHat к cURL — от базовых флагов до production--ready Bash-скриптов с ротацией IP.
Основы: флаги cURL для прокси и почему важен SOCKS5h
cURL поддерживает HTTP, HTTPS и SOCKS5-прокси через несколько флагов. Главный из них — -x (или --proxy), который принимает URL прокси-сервера. Для HTTP-прокси ProxyHat используется стандартный порт 8080:
# Базовый HTTP-прокси
curl -x http://gate.proxyhat.com:8080 https://httpbin.org/ip
Для SOCKS5-прокси используется порт 1080. Здесь есть критическое различие: socks5:// выполняет DNS-резолвинг на стороне клиента, что может раскрыть ваш реальный IP через DNS-запросы. Флаг --socks5-hostname (или схема socks5h://) заставляет прокси-сервер выполнять DNS-резолвинг — это предотвращает утечки DNS:
# SOCKS5 с локальным DNS (НЕ рекомендуется для анонимности)
curl --socks5 gate.proxyhat.com:1080 https://httpbin.org/ip
# SOCKS5h — DNS резолвится на стороне прокси (рекомендуется)
curl -x socks5h://gate.proxyhat.com:1080 https://httpbin.org/ip
Подробнее о разнице между socks5 и socks5h можно прочитать в официальной документации cURL. Коротко: если ваша цель — анонимность и доступ к гео-заблокированному контенту, всегда используйте socks5h:// или --socks5-hostname.
Аутентификация прокси в cURL и гео-таргетинг
ProxyHat кодирует аутентификацию и параметры сессии прямо в username. Это означает, что curl с аутентификацией прокси требует передачи логина и пароля через флаг --proxy-user (или -U):
# Базовая аутентификация
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'USERNAME:PASSWORD' \
https://httpbin.org/ip
# Гео-таргетинг: США, Нью-Йорк
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US-city-newyork:pass' \
https://httpbin.org/ip
# Sticky-сессия — тот же IP на протяжении сессии
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-DE-session-abc123:pass' \
https://httpbin.org/ip
Логика проста: параметры country-, city- и session- добавляются к базовому username через дефис. Sticky-сессия удерживает один IP-адрес, что полезно для многостраничного скрейпинга или авторизованных сессий. Без флага session- ProxyHat выдаёт новый IP на каждый запрос — это ротация per-request.
Переменные окружения: HTTP_PROXY, HTTPS_PROXY и конфигурационные файлы
Вместо передачи флагов в каждом вызове cURL читает переменные окружения. Переменная HTTPS_PROXY environment variable — основной способ задать прокси для HTTPS-запросов:
# Установка переменных окружения
export HTTP_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export HTTPS_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export ALL_PROXY="socks5h://user-country-US:pass@gate.proxyhat.com:1080"
export NO_PROXY="localhost,127.0.0.1,::1,.internal.example.com"
# Теперь cURL автоматически использует прокси
curl https://httpbin.org/ip
ALL_PROXY — запасной вариант для схем, не покрытых HTTP_PROXY и HTTPS_PROXY. NO_PROXY исключает указанные хосты из проксирования — критично для внутренних сервисов, где прокси-маршрут добавляет задержку или ломает соединение.
Для повторяемого конфигурационного файла используйте ~/.curlrc или кастомный файл с флагом -K:
# ~/.curlrc или ./proxy_config.txt
proxy = "http://gate.proxyhat.com:8080"
proxy-user = "user-country-US-city-newyork:pass"
compressed
max-time = 30
retry = 3
retry-all-errors
# Использование конфигурационного файла
curl -K proxy_config.txt https://httpbin.org/ip
Конфигурационный файл удобен для команд, которые запускаются по расписанию или в CI/CD-пайплайнах. Подробнее о переменных окружения и их приоритете — в документации GNU Wget и мануале cURL.
Residential против datacenter: почему residential выигрывает на сложных целях
Datacenter-прокси быстрые и дешёвые, но их IP-диапазоны легко идентифицируются. Многие сайты используют базы данных вроде MaxMind GeoIP2, которые классифицируют IP как hosting/datacenter. Когда сайт видит запрос от datacenter-IP с User-Agent браузера, это мгновенный красный флаг.
Residential-прокси используют IP-адреса реальных ISP, поэтому запросы выглядят как трафик обычного пользователя. Разница в success-rate может достигать 40–60% на защищённых целях — например, на сайтах с продвинутым anti-bot (Cloudflare, PerimeterX, Akamai). Типичная задержка residential-прокси — 200–800 мс против 50–100 мс у datacenter, но это компенсируется значительно более высоким success-rate.
Вот рабочий пример ротации IP через список URL в Bash-цикле с retry-логикой:
#!/usr/bin/env bash
# rotate_scrape.sh — ротация residential-прокси с retry
set -euo pipefail
URLS=(
"https://httpbin.org/ip"
"https://httpbin.org/headers"
"https://httpbin.org/user-agent"
"https://httpbin.org/uuid"
)
GATE="http://gate.proxyhat.com:8080"
USER="user-country-US"
PASS="pass"
for url in "${URLS[@]}"; do
echo "--- Запрос: $url ---"
curl -x "$GATE" \
--proxy-user "$USER:$PASS" \
--retry 5 \
--retry-all-errors \
--retry-delay 2 \
--max-time 30 \
--compressed \
-w '\nВремя: %{time_total}s | HTTP: %{http_code} | IP прокси: %{remote_ip}\n' \
"$url" || echo "Ошибка: $url"
done
Флаг --retry-all-errors повторяет запрос не только при сетевых ошибках, но и при HTTP 4xx/5xx — критично для скрейпинга, где 403 или 429 могут быть временными. Флаг -w выводит диагностику: общее время, HTTP-код и IP прокси-сервера, через который прошёл запрос.
Production-советы: TLS, заголовки, параллелизм
TLS 1.3 и сжатие
Принудительное использование TLS 1.3 уменьшает handshake-накладные расходы и совместимо с большинством современных сайтов. Флаг --tlsv1.3 форсирует последнюю версию протокола:
# Production-ready запрос с TLS 1.3, сжатием и User-Agent
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-GB-session-prod01:pass' \
--tlsv1.3 \
--compressed \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.9' \
--max-time 20 \
--retry 3 \
--retry-all-errors \
-s \
https://example.com/page
Параллелизм с xargs -P
Для пакетной обработки списка URL с параллелизмом используйте xargs -P. Это запускает N параллельных процессов cURL:
# Параллельная обработка 10 URL с 4 параллельными потоками
cat urls.txt | xargs -P 4 -I {} curl -s \
-x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US:pass' \
--max-time 20 \
--retry 3 \
--retry-all-errors \
-w '%{http_code} %{time_total}s {}\n' \
-o /dev/null \
{}
# Альтернатива: curl --parallel (cURL 7.66+)
curl --parallel \
--parallel-immediate \
--parallel-max 10 \
-x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US:pass' \
--config urls_config.txt
--parallel-max 10 ограничивает количество одновременных соединений. Для residential-прокси рекомендуется не более 10–20 параллельных сессий на один аккаунт, чтобы избежать rate-limiting и блокировок.
Логирование и circuit breaker в Bash
#!/usr/bin/env bash
# scrape_with_circuit_breaker.sh
set -uo pipefail
GATE="http://gate.proxyhat.com:8080"
AUTH='user-country-US:pass'
MAX_FAILURES=5
FAIL_COUNT=0
while IFS= read -r url; do
response=$(curl -s -o /dev/null -w '%{http_code}' \
-x "$GATE" --proxy-user "$AUTH" \
--max-time 20 --retry 2 \
"$url" 2>/dev/null) || response="000"
if [[ "$response" =~ ^(200|301|302|304)$ ]]; then
echo "[$(date -u +%FT%TZ)] OK $response $url"
FAIL_COUNT=0
else
echo "[$(date -u +%FT%TZ)] FAIL $response $url"
((FAIL_COUNT++))
if [ "$FAIL_COUNT" -ge "$MAX_FAILURES" ]; then
echo "Circuit breaker: $FAIL_COUNT ошибок подряд. Остановка."
break
fi
sleep 5
fi
done < urls.txt
Этот скрипт реализует простейший circuit breaker: после 5 подряд ошибок цикл останавливается, предотвращая бесполезную трату трафика и квоты.
ProxyHat SDK: тот же шлюз, меньше boilerplate
ProxyHat SDK оборачивает те же конечные точки gate.proxyhat.com:8080 и :1080, добавляя автоматическую ротацию, retry-логику и управление сессиями. Если вы переходите от ручных cURL-вызовов к Python или Node.js, SDK устраняет необходимость вручную управлять sticky-сессиями и retry:
# Python — прямой cURL-эквивалент через requests
import requests
proxies = {
"http": "http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080",
"https": "http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080",
}
try:
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=20)
r.raise_for_status()
print(r.json())
except requests.exceptions.RequestException as e:
print(f"Ошибка: {e}")
Документация SDK доступна на docs.proxyhat.com. Для production-нагрузок рекомендуется использовать SDK с встроенной retry-логикой вместо ручных циклов.
Юридические аспекты: публичные данные, CFAA и GDPR
Сбор публично доступных данных в целом легален, но границы определяются юрисдикцией. В США Computer Fraud and Abuse Act (CFAA) исторически применялся для преследования за «превышение авторизации» при доступе к компьютерным системам, хотя прецедент Van Buren v. United States (2021) сузил определение «превышения авторизации». В ЕС GDPR регулирует обработку персональных данных — IP-адреса считаются персональными данными, и их обработка требует законного основания.
Практические принципы:
- Соблюдайте
robots.txt— это не закон, но сигнал добросовестности. - Не обходьте технические средства защиты (CAPTCHA, paywalls) — это может квалифицироваться как нарушение ToS или CFAA.
- Не собирайте персональные данные без законного основания.
- Если у сервиса есть официальный API — используйте его. Это дешевле, надёжнее и юридически безопаснее.
Подробнее о вариантах использования прокси см. на странице веб-скрейпинг и SERP-трекинг. Полный список доступных локаций — на странице локации. Тарифы residential-прокси — на странице цены.
Ключевые выводы
- Используйте
socks5h://или--socks5-hostnameдля DNS-резолвинга на стороне прокси — это предотвращает утечки DNS.- Гео-таргетинг и sticky-сессии кодируются в username:
user-country-US-city-newyork-session-abc123.- Переменные окружения (
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXY) и~/.curlrcустраняют дублирование флагов.- Residential-прокси дают на 40–60% выше success-rate на защищённых целях, несмотря на большую задержку.
- Production-настройки:
--retry-all-errors,--tlsv1.3,--compressed, кастомные заголовки и ограничение параллелизма.- Соблюдайте закон: публичные данные — OK, обход защиты и сбор персональных данных — рискованно. Предпочитайте официальный API.
Начните с бесплатного тестового запроса через ProxyHat и переходите к production-скриптам, когда базовые шаблоны отработаны. Все примеры выше используют один и тот же шлюз gate.proxyhat.com — меняйте только параметры в username.






