У меня есть несколько вопросов, пожалуйста, помогите:
Во-первых, я могу получить доступ к поиску Google, просто набрав http://74.125.224.211
, потому что это IP-адрес, возвращаемый nslookup.
Однако я не мог сделать это с IP-адресами, возвращенными с www.yahoo.com. Как перейти на страницу поиска Yahoo по IP?
Другой пример, http://www.allaboutcircuits.com
разрешается 68.233.243.63
DNS-сервером, но если я перехожу к нему http://68.233.243.63
, я получаю «Hello world!».
Во-вторых, по какой-то причине что-то не так с DNS-распознавателями с моим веб-хостингом (это не будет исправлено !!) . Так что команды вроде
get_file_contents("http://www.allaboutcircuits.com");
вернется php_network_getaddresses: getaddrinfo failed: Name or service not known
Как мне обойти это с IP-адресом,
68.233.243.63
Я имею в виду, как-то присоединить параметр имени хоста HTTP к get_file_contents()
?
Я хотел бы решить эту проблему со своей стороны (в моем коде), администратор сервера не будет выполнять никаких действий по устранению неполадок / настройке.
источник
Ответы:
В вашем PHP-скрипте, когда вы обращаетесь к нему по IP-адресу, вам также необходимо отправить
Host:
заголовок в вашем запросе с правильным доменным именем.Этот вопрос о переполнении стека объясняет, как это сделать: /programming/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call
источник
Как сказал wallyk, это виртуальные серверы
Возьми этот пример для Apache
В c: \ www \ example.com создайте индексный файл со словами «Hello World! Example.com»
в c: \ www \ example2.com создайте индексный файл со словами «Hellow World! example2.com»
И измените свой файл hosts на
Затем перейдите на http://example.com, затем перейдите на http://example2.com
Так вот, как вы можете иметь несколько сайтов на один IP
Так что в основном ответ таков: нет, вы не сможете получить этот сайт с ip.
источник
Host
заголовке, необходимую для того, чтобы сервер различал веб-сайты, которые он размещает, и обслуживал правильный.Вы говорите, что хотите вручную указать имя хоста и IP-адрес вместо того, чтобы полагаться на DNS-сервер, находящийся вне вашего контроля. Глядя на комментарии в документации к file_get_contents , я вижу, что комментаторы решили аналогичные проблемы, создав контекст, содержащий необходимый заголовок Host :. Что-то вроде этого:
Конечно, имейте в виду, что недостатком ручного указания имени хоста и IP-адреса является то, что если в будущем IP-адрес изменится (например, если сайт переходит на нового хостинг-провайдера), ваш код может перестать работать до Вы вручную обновляете IP-адрес.
источник
Одного IP-адреса недостаточно, чтобы однозначно определить, на какой сайт вы хотите перейти, когда несколько виртуальных хостов работают на одном порту / сервере. В этом случае вам нужно указать заголовок Host в HTTP-запросе, который идентифицирует имя сервера. Вы можете сделать это напрямую через telnet к порту 80:
где вы вводите команду telnet, строки GET и Host, а затем получаете исходный код HTML, возвращаемый с сервера.
Или вы можете использовать curl, где вы специально добавляете заголовок (с
-H
флагом).источник
Вы можете использовать другой DNS-сервер на стороне клиента, если это не веб-хостинг - 8.8.8.8 и 8.8.8.6 работают под управлением Google, а 4.4.4.2 является обычным резервом. Namebench позволит вам найти самый быстрый. В качестве альтернативы вы можете использовать какой-либо прокси-сервис (я запускаю свой собственный на VPS или использую Tor, но есть и другие варианты).
Поскольку это PHP, еще более простой вариант - запустить код в другой системе. Кладжес не подлежит ремонту.
источник