Легко проверить. Ты делаешь:
url = "https://file.11klasov.net/index.php?do=download&id=16985" # замените на URL файла, который вы хотите скачать
response = requests.get(url)
Затем посмотри атрибут
response.history
, и ты увидишь там два ответа:
[<Response [302]>, <Response [301]>]
. Все коды 3XX - это перенаправления, т.е. сайт тебя перенаправляет на другую страницу, вместо того, чтобы отдать контент.
Итог этих перенаправлений можно узнать из
response.url
, который будет равен
'https://file.11klasov.net/13938-russkij-jazyk-7-klass-razumovskaja-mm-lvova-si-kapinos-vi-i-dr.html'
Т.е. сайт задетектил бота, и отправил тебя на страницу учебника. Так обычно борятся с хотлинкингом, когда кто-то ставит прямую ссылку на файл на твоём сайте.
Также можно проверить
response.headers['content-type']
. Он будет
'text/html; charset=utf-8'
, т.е. это HTML страница а не PDF файл. Разумеется, если ты HTML страницу запишешь в файл с расширением .pdf, она от этого не станет валидным PDF.
Обычно проверяются две вещи: User-Agent и Referer. Первый описывает браузер пользователя, второй - с какой страницы был переход по этой ссылке. Но для данного сайта, похоже, достаточно добавить только Referer вот так:
response2 = requests.get(url, headers={
'referer': response.url, # ну или 'https://file.11klasov.net/13938-russkij-jazyk-7-klass-razumovskaja-mm-lvova-si-kapinos-vi-i-dr.html'
})
То получишь желаемое -
response2.history
будет пустой, а
response2.headers['content-type']
будет равен
'application/pdf'
.
С учётом этого можешь поправить свой код, чтобы он детектил редирект и делал второй запрос с заголовком Referer.