J'ai quelques questions, aidez-moi:
Premièrement, je peux accéder à la recherche Google en tapant simplement http://74.125.224.211
, car il s'agit de l'adresse IP renvoyée par nslookup.
Cependant, je ne pouvais pas le faire avec les adresses IP renvoyées par www.yahoo.com. Comment accéder à la page de recherche Yahoo par son IP?
Un autre exemple, http://www.allaboutcircuits.com
résoudra 68.233.243.63
par serveur DNS, mais si j'y vais http://68.233.243.63
, j'obtiens "Bonjour tout le monde!".
Deuxièmement, pour une raison quelconque, il y a un problème avec les résolveurs DNS avec mon service d'hébergement Web (il ne sera pas résolu !!) . Donc, des commandes comme
get_file_contents("http://www.allaboutcircuits.com");
reviendra php_network_getaddresses: getaddrinfo failed: Name or service not known
Comment contourner cela avec l'adresse IP,
68.233.243.63
Je veux dire, en quelque sorte attacher le paramètre de nom d'hôte HTTP à get_file_contents()
?
Je voudrais résoudre ce problème de mon côté (dans mon code), aucun dépannage / ajustement ne sera effectué par l'administrateur du serveur.
la source
Réponses:
Dans votre script PHP, lorsque vous y accédez par adresse IP, vous devez également envoyer un en-
Host:
tête dans votre demande avec le nom de domaine correct.Cette question sur Stack Overflow explique comment le faire: /programming/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call
la source
Comme l'a dit wallyk, ce sont des serveurs virtuels
Prenez cet exemple pour apache
Dans c: \ www \ example.com, créez un fichier d'index disant "Hello World! Example.com"
dans c: \ www \ example2.com, créez un fichier d'index indiquant "Hellow World! example2.com"
Et changez votre fichier d'hôtes en
Ensuite, allez sur http://example.com puis allez sur http://example2.com
Voilà donc comment vous pouvez avoir plusieurs sites par IP unique
Donc, fondamentalement, la réponse est non, vous ne pourrez pas obtenir ce site à partir de l'ip.
la source
Host
tête nécessaires à un serveur pour distinguer les sites Web qu'il héberge et servir le bon.Vous dites que vous souhaitez spécifier manuellement le nom d'hôte et l'adresse IP, au lieu de compter sur un serveur DNS hors de votre contrôle. En regardant les commentaires de la documentation file_get_contents , je vois que les commentateurs ont résolu des problèmes similaires en créant un contexte qui contient l'en-tête Host: nécessaire. Quelque chose comme ça:
Bien sûr, sachez que l'inconvénient de spécifier manuellement le nom d'hôte et l'adresse IP est que si l'adresse IP change à l'avenir (par exemple, si le site passe à un nouveau fournisseur d'hébergement), votre code pourrait cesser de fonctionner jusqu'à ce que vous mettez à jour manuellement l'adresse IP.
la source
L'adresse IP seule ne suffit pas pour identifier de manière unique le site auquel vous souhaitez vous rendre lorsque plusieurs hôtes virtuels s'exécutent sur le même port / serveur. Dans ce cas, vous devez spécifier l'en-tête Host dans la requête HTTP qui identifie le nom du serveur. Vous pouvez le faire directement via telnet sur le port 80:
où vous tapez la commande telnet et les lignes GET et Host, puis récupérez le code source HTML renvoyé par le serveur.
Ou vous pouvez utiliser curl où vous ajoutez spécifiquement l'en-tête (avec le
-H
drapeau).la source
Vous pouvez utiliser un autre serveur DNS côté client, au cas où ce ne serait pas l'hôte Web - 8.8.8.8 et 8.8.8.6 sont gérés par Google, et 4.4.4.2 est un standby courant. Namebench vous permettra de trouver le plus rapide. Alternativement, vous pouvez utiliser un service proxy d'une certaine sorte (je lance le mien sur un VPS ou j'utilise Tor, mais il existe d'autres options).
Comme il s'agit de PHP, une option encore plus simple serait d'exécuter le code sur un autre système. Kludges ne sont pas maintenables.
la source