Следование редиректам с помощью Curl

По умолчанию Curl не следит за перенаправлениями и отображает содержимое страницы 300x (если таковая имеется). Чтобы отслеживать перенаправления с помощью Curl, необходимо использовать опцию командной строки -L или --location. Сервер указывает, что ресурс переместился на новое место, используя код ответа 3XX, и предоставляет новый адрес в HTTP-заголовке Location.

В этом примере Curl мы отправляем запрос на www.example.com, который перенаправляется на example.com.

Что такое Curl?

Curl - это инструмент командной строки, который можно использовать для передачи данных на сервер или с сервера по более чем 25 протоколам, включая HTTP, HTTPS и FTP. Он используется для отладки сетевых запросов и вызовов API и имеет встроенную поддержку веб-форм, SSL, HTTP Cookies. Curl работает на Mac, Windows, Linux и многих других платформах.

Что такое HTTP Redirect?

HTTP Redirect (или сокращенно redirect) перенаправляет посетителей и поисковые системы с одного URL на другой. Перенаправление является одним из основных строительных блоков Интернета и реализовано как часть протокола HTTP. Концепция HTTP Redirect была представлена и задокументирована уже в первой спецификации протокола HTTP (RFC 1945). HTTP-перенаправления используются, например, когда вы переносите свой сайт на новое, более привлекательное доменное имя и хотите автоматически перенаправить всех пользователей со старого доменного имени на новое. HTTP-перенаправления также используются, когда вы хотите перенаправить всех посетителей с HTTP-версии ваших страниц на более безопасную HTTPS-версию или когда содержимое страницы было перемещено на новый адрес или удалено. Если сервер хочет перенаправить HTTP-клиента на новый URL, он должен вернуть один из кодов состояния 300x и новый адрес в заголовке HTTP Location. Сам адрес может быть как абсолютным, так и относительным.

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

Чтобы следить за редиректами в Curl, используйте параметр командной строки -L или --location. Этот флаг указывает Curl на повторную отправку запроса по новому адресу. Когда вы отправляете POST-запрос, а сервер отвечает одним из кодов 301, 302 или 303, Curl выполнит последующий запрос методом GET. Для других кодов статуса 300x Curl повторно отправит последующий запрос, используя тот же немодифицированный метод HTTP. Это поведение может быть изменено с помощью одного из флагов --post301, --post302 или --post303. Когда используется аутентификация, Curl отправляет свои учетные данные только на первый хост. Если при перенаправлении Curl переходит на другой хост, он не будет предоставлять учетные данные пользователя новому хосту (вы можете изменить это поведение с помощью флага --location-trust). Чтобы ограничить количество последующих перенаправлений, вы можете использовать параметр командной строки --max-redirs.

Синтаксис команды Curl Redirect

Общий вид команды Curl Follow Redirect выглядит следующим образом:
Синтаксис команды Curl Redirect с использованием опции -L

Пример перенаправления с помощью Curl

Пример Curl для отслеживания перенаправления на другой хост с учетными данными пользователя и флагом --location-trust:

Как задать максимальное количество разрешенных перенаправлений?

Когда перенаправления включены с помощью параметров командной строки -L, Curl может выполнить до 50 перенаправлений. Чтобы убрать максимальное количество перенаправлений и сделать его неограниченным, вы можете установить этот параметр в -1 с помощью опции командной строки --max-redirs. Вы также можете уменьшить максимальное количество разрешенных перенаправлений, уменьшив значение параметра, например, до 10. Например, в Google Chrome и Mozilla Firefox максимальное число перенаправлений равно 20. Ограничение максимального количества перенаправлений помогает Curl избежать риска попадания в бесконечный цикл.

Как заставить Curl не менять POST на GET при 301 и 302 редиректах?

Вы можете указать Curl не менять метод запроса POST на GET для 301, 302 и 303 редиректов, используя один из следующих флагов: --post301, --post302 или --post303.

Как аутентифицировать пользователя, когда сервер перенаправляет на другое имя хоста?

Когда вы отправляете запросы на сервер с помощью Curl, вы также можете предоставить серверу учетные данные пользователя. Но если сервер перенаправляет Curl на другой хост, Curl не будет отправлять учетные данные пользователя на новый адрес по соображениям безопасности. Если вы все же хотите отправить учетные данные пользователя на следующие хосты, вы можете использовать для этого параметр командной строки --location-trust.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий