Mam kilka pytań, proszę o pomoc:
Po pierwsze, mogę uzyskać dostęp do wyszukiwania Google po prostu przez wpisanie http://74.125.224.211
, ponieważ jest to adres IP zwrócony przez nslookup.
Nie mogłem tego jednak zrobić z adresami IP zwróconymi z www.yahoo.com. Jak przejść do strony wyszukiwania Yahoo według adresu IP?
Kolejny przykład http://www.allaboutcircuits.com
zostanie rozwiązany 68.233.243.63
przez serwer DNS, ale jeśli przejdę do niego http://68.233.243.63
, dostanę „Hello world!”.
Po drugie, z jakiegoś powodu coś jest nie tak z rozwiązaniami DNS w mojej usłudze hostingowej (nie zostanie to naprawione !!) . Więc polecenia jak
get_file_contents("http://www.allaboutcircuits.com");
wróci php_network_getaddresses: getaddrinfo failed: Name or service not known
Jak obejść ten problem za pomocą adresu IP,
68.233.243.63
Mam na myśli, jakoś dołączyć parametr nazwy hosta HTTP do get_file_contents()
?
Chciałbym rozwiązać ten problem po mojej stronie (w moim kodzie), administrator serwera nie rozwiąże żadnych problemów.
źródło
Odpowiedzi:
W skrypcie PHP, kiedy uzyskujesz do niego dostęp za pomocą adresu IP, musisz również wysłać
Host:
we wniosku nagłówek z poprawną nazwą domeny.To pytanie dotyczące przepełnienia stosu wyjaśnia, jak to zrobić: /programming/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call
źródło
Jak powiedział wallyk, są to serwery wirtualne
Weź ten przykład dla apache
W folderze c: \ www \ example.com utwórz plik indeksu z napisem „Hello World! Example.com”
in c: \ www \ example2.com utwórz plik indeksu z napisem „Hellow World! example2.com”
I zmień plik hosts na
Następnie idź do http://example.com, a następnie do strony http://example2.com
W ten sposób możesz mieć wiele witryn na jednym ip
Więc w zasadzie odpowiedź brzmi: nie, nie będziesz w stanie pobrać tej strony z ip.
źródło
Host
nagłówka niezbędnego do tego, aby serwer mógł rozróżnić strony, które hostuje i podawać poprawne.Mówisz, że chcesz ręcznie określić zarówno nazwę hosta, jak i adres IP, zamiast polegać na serwerze DNS poza Twoją kontrolą. Patrząc na komentarze w dokumentacji file_get_contents , widzę, że komentatorzy rozwiązali podobne problemy, tworząc kontekst zawierający potrzebny nagłówek Host:. Coś takiego:
Oczywiście należy pamiętać, że wadą ręcznego określania zarówno nazwy hosta, jak i adresu IP jest to, że jeśli adres IP zmieni się w przyszłości (na przykład, jeśli witryna zostanie przeniesiona do nowego dostawcy hostingu), kod może przestać działać do ręcznie aktualizujesz adres IP.
źródło
Sam adres IP nie wystarczy, aby jednoznacznie zidentyfikować witrynę, do której chcesz przejść, gdy wiele wirtualnych hostów działa na tym samym porcie / serwerze. W takim przypadku musisz podać nagłówek hosta w żądaniu HTTP, który identyfikuje nazwę serwera. Możesz to zrobić bezpośrednio przez telnet na port 80:
gdzie wpiszesz polecenie telnet oraz linie GET i Host, a następnie zwrócisz kod źródłowy HTML z serwera.
Lub możesz użyć curl, gdzie specjalnie dodajesz nagłówek (z
-H
flagą).źródło
Możesz użyć innego serwera DNS po stronie klienta, na wypadek, gdyby nie był to host internetowy - 8.8.8.8 i 8.8.8.6 są obsługiwane przez Google, a 4.4.4.2 jest częstym trybem gotowości. Namebench pozwoli Ci znaleźć najszybszy. Alternatywnie, możesz użyć jakiejś usługi proxy (uruchamiam własną na VPS lub używam Tora, ale są inne opcje).
Ponieważ jest to PHP, jeszcze łatwiejszą opcją byłoby uruchomienie kodu w innym systemie. Kludges nie da się utrzymać.
źródło