Я работаю сценарий PHP, чтобы попытаться разрешить неопределенный URL (например, набрав в facebook.com) в качестве абсолютного URL (например, https://www.facebook.com); похоже на то, что ваш браузер делает ежедневно, используя PHP.
Пока у меня есть следующий код:
$link = gethostbyname("facebook.com");
Это обеспечивает адрес IPV4, который работает, но затем, когда я обращаюсь к поиску, используя:
$link2 = gethostbyaddr($link);
Я ожидаю получить действительный URL, например «https://www.facebook.com«, но вместо этого я получаю мусор, такой как» ‘edge-star-mini-shv-13-atn1.facebook.com’ «
Это тогда разрушает всякую надежду использовать fopen или curl, чтобы попытаться прочитать содержимое веб-страницы.
Может кто-нибудь объяснить, что здесь пошло не так и как я могу это решить?
РЕДАКТИРОВАТЬ: Попытка небезопасного URL, такого как «google.co.uk», возвращает «lhr25s10-in-f3.1e100.net», так что это не связано с безопасным HTTP (HTTPS)
gethostbyaddr
получает имя хоста, а не URL, для IP-адреса.
Несколько имен хостов могут быть назначены одному IP-адресу.
gethostbyaddr
получит по умолчанию.
HTTP-сервер, прослушивающий этот IP-адрес, будет обрабатывать запросы ко всем именам хостов.
HTTP-запрос включает заголовок запроса Host
который указывает, какое имя хоста вы запрашиваете.
HTTP-сервер может обращать внимание на этот заголовок и обслуживать разный контент для разных имен хостов. Это позволяет размещать несколько сайтов на одном IP-адресе. Это очень полезно, поскольку IPv4-адреса ограничены, а веб-сайтов очень много.
Вы получаете имя хоста по умолчанию для хостинга компьютера facebook.com
, но веб-сервер не размещает веб-сайт, который вы хотите на этом имени хоста.
Других решений пока нет …