302 - это перенаправление HTTP.Веб-браузер будет выполнять перенаправление на URL-адрес, указанный в заголовке ответа Location
.При запросе следующего URL-адреса он будет иметь собственный код ответа, который может включать 404.
Ваш код Python не следует перенаправлению, что объясняет, почему вместо него получается исходный 302.
Согласно документации Запросы :
Перенаправление и история
По умолчанию запросы выполняют перенаправление местоположения для всех глаголов , кромеHEAD .
Мы можем использовать свойство history
объекта Response для отслеживания перенаправления.
Список Response.history
содержит Response
объекты, которые были созданы для того, чтобызавершить запрос.Список отсортирован от самого старого до самого последнего ответа.
...
Если вы используете GET, OPTIONS, POST, PUT, PATCH или DELETE, вы можете отключить обработку перенаправленияс параметром allow_redirects
:
>>> r = requests.get('https://github.com/', allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]
Если вы используете HEAD, вы также можете включить перенаправление :
>>> r = requests.head('https://github.com/', allow_redirects=True)
>>> r.url
'https://github.com/'
>>> r.history
[<Response [301]>]
Итак,в своем коде измените это:
r = requests.head(testpoint_url)
На это:
r = requests.head(testpoint_url, allow_redirects=True)
Тогда r.status_code
будет окончательным кодом состояния (т. е. 404) после всех перенаправлений.