Ответ Аран-Фей хорошо работает на страницах с хорошим поведением, которые составляют 99,99% Интернета. Но нет правила, согласно которому URL-адрес, заканчивающийся конкретным расширением, должен разрешать содержимое определенного типа. Плохо настроенный сервер может вернуть html для запроса на страницу с именем «example.png», или он может вернуть mpeg для страницы с именем «example.php», или любую другую комбинацию типов содержимого и расширений файлов.
Самый точный способ получить информацию о типе контента для URL-адреса - это посетить этот URL-адрес и изучить тип контента в его заголовке. В большинстве библиотек с интерфейсом http есть способ извлечения только информации заголовка с сайта, поэтому эта операция должна быть относительно быстрой даже для очень больших страниц. Например, если вы используете requests
, вы можете сделать:
import requests
def get_content_type(url):
response = requests.head(url)
return response.headers['Content-Type']
test_cases = [
"http://www.example.com",
"https://i.stack.imgur.com/T3HH6.png?s=328&g=1",
"http://php.net/manual/en/security.hiding.php",
]
for url in test_cases:
print("Url:", url)
print("Content type:", get_content_type(url))
Результат:
Url: http://www.example.com
Content type: text/html; charset=UTF-8
Url: https://i.stack.imgur.com/T3HH6.png?s=328&g=1
Content type: image/png
Url: http://php.net/manual/en/security.hiding.php
Content type: text/html; charset=utf-8