HTTP-перенаправления обычно принимают форму кода ответа 3xx плюс заголовок «Location:», который указывает, куда перенаправить.Это кодифицировано в протоколе HTTP, и поэтому любая совместимая клиентская реализация просто сделает все, что говорит эта спецификация.
См. RFC 7231, раздел 6.4.
В очень многих словах, если вы вызываете requests
для посещения URL-адреса (с разрешенным перенаправлением - его можно отключить с помощью опции в requests
) и сервер говорит «иди сюда вместо», requests
будет внутренне вызывать себя для нового URL-адресаи добавьте предыдущий в историю столько раз, сколько потребуется, чтобы добраться до страницы, которая не перенаправляет, или вы достигнете предела (обычно устанавливается около 30, чтобы предотвратить махинации, такие как перенаправление страницы на себя в бесконечном количествеloop).
Многие веб-серверы, такие как CMS, полагаются на конфигурации перезаписи URL-адресов на стороне сервера, которые позволяют программисту создавать (структурно) простой URL-адрес, который затем сервер разрешает и перенаправляет в другое местоположение, которое может быть болеедружественный для человеческого глаза или соответствующий унифицированному соглашению, определенному администратором этого сервера, а некоторыесети доставки контента используют перенаправление для отправки каждого посетителя на сервер, который близок к ним географически или с точки зрения топологии сети.Отслеживание кликов также часто заставляет ваш браузер переходить по уникальному URL-адресу перед его отправкой, чтобы фактически извлечь контент, который он пытается отобразить.Из-за этих приемов нередки случаи, когда при попытке получить что-то несколько перенаправлений.
Кроме того, но на самом деле за пределами того, что поддерживают requests
или аналогичные библиотеки, интерактивные браузеры также обычно поддерживают JavaScript, что позволяетвеб-страница для запуска кода в браузере, который может заставить ее посещать новую страницу под программным управлением (то есть, возможно, в сложных условиях, которые могут даже не быть полностью детерминированными).Если вам нужно это поддержать, популярное в настоящее время решение состоит в том, чтобы запустить настоящий интерактивный браузер (возможно, «безголовый», то есть без видимого пользовательского интерфейса) и заставить его каким-либо образом сообщать свое состояние Python.