Как следовать HTTP-редиректам с помощью cURL

Когда нужно получить реальное содержимое страницы, метод cURL follow redirect становится очень полезным. Используя команду curl -L <URL> вместо простой curl <URL>, вы гарантируете, что попадёте на финальную страницу и получите данные именно оттуда. В других случаях сайт может перенаправить вас на страницу для конкретного региона или на любую другую страницу по своему усмотрению. Здесь вы узнаете, как использовать эту команду и как устранять возможные проблемы.

В сочетании с прокси CyberYozhвы получаете набор инструментов для получения контента с любой страницы без ограничений и нежелательных редиректов. 

ℹ️

cURL крайне полезен, когда нужно быстро и автоматически выполнять HTTP-запросы. Читайте статью «Как аутентифицироваться на сайтах с помощью cURL», чтобы узнать больше.

Инструменты: какие прокси выбрать

Цепочки редиректов часто проходят через геоспецифичные или CDN-эндпоинты, поэтому прокси за вашим cURL-запросом определяет, попадёте ли вы на правильную финальную страницу или получите блокировку в середине цепочки. 

Ротационные резидентские прокси должны быть вашим выбором по умолчанию: их ротация IP легко контролируется для каждого запроса или сессии, что критично для процессов скрейпинга и сбора данных, где каждый переход по редиректу требует чистого, надёжного IP.

Тип прокси

Применение для задач с большим числом редиректов

Ротационные резидентские прокси

Предпочтительный вариант по умолчанию: контролируемая ротация, низкий процент блокировок в многоступенчатых цепочках

Мобильные прокси LTE/5G

Лучший выбор для редиректов при входе в аккаунт и геоблокировок, требующих доверия на уровне оператора связи

Резидентские ISP-прокси

Стабильный статичный IP для цепочек редиректов, требующих сохранения сессии

Датацентровые прокси

Самые быстрые, но наименее эффективные против антибот-проверок на основе редиректов

Процесс: использование команд cURL follow redirect

Базовая команда выглядит так:

bash
curl -L <URL>

Она устанавливает целевой URL как конечный пункт назначения, который должен быть достигнут, даже если сайт перенаправит вас на другой URL, например на страницу для конкретного региона. Чтобы использовать с прокси, нужно немного изменить команду, добавив -x (или --proxy) с указанием протокола (HTTP или SOCKS5; подробнее о выборе протокола прокси) и учётных данных прокси.

bash
curl -L -x <protocol://user:password@IP:port> <URL>
⚙️

С ротационными проксивы получаете шлюз с учётными данными, доступный в панели управления: просто укажите его в команде и настройте ротацию там.

Используйте базовые редиректы с curl -L

Добавьте -L к любому запросу cURL, чтобы он автоматически следовал за каждым заголовком 3xx Location до получения финального ответа.

bash
curl -L <URL>

Без -LcURL останавливается на первом редиректе и возвращает только промежуточный ответ.

Используйте --max-redirs для установки лимитов

Ограничьте количество переходов, которые будет выполнять cURL, чтобы предотвратить зависание на циклах или избыточных цепочках.

bash
curl -L --max-redirs 5 <URL>

Устанавливайте низкое значение (2–5) для коротких цепочек и более высокое только для известных многошаговых процессов вроде авторизации или маршрутизации CDN.

⚙️

Соблюдение лимитов запросов и файла robots.txt сайта крайне важно. Читайте о этичном скрейпинге, чтобы узнать больше.

Используйте curl -L -v, чтобы увидеть последовательность редиректов

Добавьте -v (подробный режим), чтобы вывести каждый заголовок запроса и ответа, включая каждый переход Location в цепочке.

bash
curl -L -v <URL>

Используйте это, когда цепочка редиректов ведёт себя неожиданно и вам нужно определить, где именно она расходится.

Используйте curl -L -I для проверки страниц редиректов

Объедините -I (только заголовки) с -L, чтобы отследить полную цепочку редиректов без загрузки тела страниц.

bash
curl -L -I <URL>

Это самый быстрый способ подтвердить финальный URL назначения и коды состояния перед запуском полного парсинга.

Используйте curl -A для отправки пользовательского user-agent

Укажите реалистичную строку user-agent, чтобы логика редиректов, привязанная к определению устройства или браузера, работала корректно.

bash
curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" <URL>
📡

Читайте, как использование случайных user-agent помогает защитить ваши процессы парсинга и избежать ограничений.

Отладка: устранение распространённых проблем

Если вы столкнулись с какой-либо проблемой, не переживайте. Большинство из них легко решаются. Здесь мы рассмотрим самые частые из них и способы их устранения.

HTTP 302 и другие коды ответов

При работе с редиректами cURL вы часто сталкиваетесь с кодами HTTP 3xx, каждый из которых имеет свои правила сохранения метода и тела запроса. В таких случаях нужно переключаться между методами GET и POST

ℹ️

Оба метода легко использовать с функцией curl, указав их перед URL. GET используется по умолчанию в большинстве случаев, для использования POSTнужно явно указать POST перед URL.

301 Moved Permanently

Ресурс имеет новый постоянный URL; некоторые клиенты при переходе меняют POST на GET. Используйте -L как обычно; считайте новый URL каноническим для будущих запросов.

302 Found

Устаревший временный редирект; поведение при сохранении метода непоследовательно у разных клиентов, поэтому cURL может преобразовать POST в GET. Это самая частая проблема. Если вам нужно сохранить исходный метод, явно проверьте с --post302.

303 See Other

Всегда перенаправляет на GET-запрос, обычно после завершения отправки формы или действия API. Ожидайте, что данные тела будут отброшены; не полагайтесь только на -L, если вам нужно повторно отправить исходные данные.

307 Temporary Redirect

Сохраняет исходный метод и тело, поэтому POST остаётся POST. Безопасно использовать с -L при парсинге API-эндпоинтов, которые перенаправляют после отправки.

308 Permanent Redirect

То же, что и 301, но гарантирует, что метод не изменится. Считайте это современным, безопасным для метода эквивалентом постоянного перемещения.

cURL не следует редиректам

Если curl -L не даёт эффекта, сайт, вероятно, использует редирект через JavaScript или meta-refresh, который cURL не видит, так как читает только HTTP-заголовки. 

Проверьте с помощью curl -L -I сначала. Если статус остаётся 200, логика редиректа работает на стороне клиента и требует headless-браузера вместо этого.

⚙️

Изучите гайды по Playwright и Puppeteer, чтобы узнать больше о продвинутой веб-автоматизации и скрейпинге.

Ошибка cURL 47 maximum redirects followed

Эта ошибка означает, что cURL достиг лимита --max-redirs (по умолчанию он высокий, но циклы быстро его исчерпывают). Решения:

  1. Запустите curl -L -v, чтобы проверить цепочку и обнаружить цикл.

  2. Снизьте --max-redirs во время отладки.

  3. Переключитесь на чистый IP ротационных резидентских прокси. Многие циклы редиректов возникают из-за того, что антибот-системы отклоняют IP из чёрных списков или переиспользованные датацентровые IP.

Заключение: используйте cURL follow redirect

Команды cURL для редиректов позволяют достичь реальной финальной страницы вместо остановки на промежуточном переходе, используя -L для следования и --max-redirs, чтобы избежать циклов. В паре с резидентскими или мобильными прокси CyberYozh вы получаете стабильный доступ без блокировок к сайтам с большим количеством редиректов в любом масштабе.

Посмотрите каталог прокси прямо сейчас, чтобы начать.

FAQ о cURL follow redirect

Как заставить cURL следовать редиректам?

Добавьте флаг -L (или --location) к вашей команде. cURL будет читать каждый заголовок Location и автоматически запрашивать следующий URL, пока не достигнет финальной страницы.

Почему curl -L не работает на некоторых сайтах?

Редирект может быть реализован через JavaScript или meta-refresh, а не через HTTP 3xx-ответ, который cURL не может обнаружить, поскольку обрабатывает только заголовки.

Сколько редиректов cURL выполняет по умолчанию?

cURL по умолчанию выполняет большое количество переходов, но это можно изменить с помощью --max-redirs, что также защищает от бесконечных циклов.

Что означает ошибка «curl: (47) maximum redirects followed»?

Это означает, что cURL достиг лимита редиректов, обычно из-за цикла или повторяющихся отказов сайта в обработке запроса, часто вызванных заблокированным IP-адресом.

Как использовать cURL с прокси и следовать редиректам одновременно?

Комбинируйте -L с -x protocol://user:password@IP:port; cURL будет направлять каждый переход в цепочке редиректов через этот прокси.

Следует ли cURL автоматически редиректам 302?

Только при включённом -L; без него cURL останавливается на первом ответе 302 и не запрашивает новый URL.

Как остановить cURL от следования редиректам?

Просто не используйте -Lили установите --max-redirs 0, если хотите убедиться, что флаг не установлен случайно где-то ещё.

Меняет ли редирект мой запрос с POST на GET?

Зависит от кода статуса: 301/302 могут переключиться на GET в некоторых клиентах, тогда как 307/308 всегда сохраняют исходный метод и тело запроса.

Как увидеть полную цепочку редиректов без загрузки тела страницы?

Используйте curl -L -I, чтобы вывести только заголовки и коды статуса для каждого перехода, быстро определив конечный адрес.

Какой тип прокси лучше всего подходит для парсинга с большим количеством редиректов?

Ротационные резидентские прокси рекомендуются по умолчанию, поскольку они сочетают контролируемую ротацию IP с высокой степенью принятия при проверках на редиректы и антибот-системы.