いくつか質問があります。助けてください:
まず、_http://74.125.224.211
_と入力するだけでGoogle検索にアクセスできます。これはnslookupから返されるIPアドレスだからです。
しかし、www.yahoo.comから返されたIPアドレスではそうすることができませんでした。 IPでYahoo検索ページにアクセスするにはどうすればよいですか。
別の例として、_http://www.allaboutcircuits.com
_はDNSサーバーによって_68.233.243.63
_に解決されますが、_http://68.233.243.63
_に移動すると、「Helloworld!」が表示されます。
第二に、何らかの理由で、私のWebホスティングサービスの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:
ヘッダーを正しいドメイン名で送信する必要もあります。
Stack Overflowに関するこの質問では、その方法について説明しています。 https://stackoverflow.com/questions/356705/how-to-send-a-header-using-a-http-request-through-a-curl -呼び出し
Wallykが言ったように、それは仮想サーバーです
Apacheのこの例を見てください
<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>
C:\ www\example.comで、「Hello World!example.com」というインデックスファイルを作成します。
c:\ www\example2.comで、「Hellow World!example2.com」というインデックスファイルを作成します。
そして、hostsファイルをに変更します
127.0.0.1 example.com
127.0.0.1 example2.com
次に、 http://example.com に移動し、次に http://example2.com に移動します。
つまり、単一のIPごとに複数のサイトを持つことができるのです。
つまり、基本的に答えは、IPからそのサイトを取得することはできないということです。
制御できないDNSサーバーに依存するのではなく、ホスト名とIPアドレスの両方を手動で指定したいとします。 file_get_contents documentation のコメントを見ると、必要なHost:ヘッダーを含むコンテキストを作成することで、同様の問題を解決したコメント投稿者がいます。このようなもの:
$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);
もちろん、ホスト名とIPアドレスの両方を手動で指定することの欠点は、IPアドレスが将来変更された場合(たとえば、サイトが新しいホスティングプロバイダーに移動した場合)、コードが機能しなくなる可能性があることに注意してください。 IPアドレスを手動で更新します。
複数の仮想ホストが同じポート/サーバーで実行されている場合、IPアドレスだけでは、移動するサイトを一意に識別するのに十分ではありません。その場合、サーバー名を識別するHTTPリクエストでHostヘッダーを指定する必要があります。 Telnetを介してポート80に直接接続できます。
$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com
ここで、telnetコマンド、およびGET行とHost行を入力し、サーバーから返されたHTMLソースコードを取得します。
または、ヘッダーを具体的に追加するcurlを使用することもできます(-H
国旗)。
curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
第二に、何らかの理由で、私のウェブホスティングサービスのDNSリゾルバーに何か問題があります(修正されません!!)
Webホストでない場合は、クライアント側で別のDNSサーバーを使用できます。8.8.8.8と8.8.8.6はGoogleによって実行され、4.4.4.2は一般的なスタンバイです。 Namebench 最速で検索できます。または、何らかのプロキシサービスを使用することもできます(私はVPSで独自に実行するか、Torを使用していますが、他のオプションがあります)。
これはPHPであるため、さらに簡単なオプションは、別のシステムでコードを実行することです。クラッジは維持できません。