Saya punya beberapa pertanyaan, tolong bantu:
Fist, saya dapat mengakses pencarian Google hanya dengan mengetik http://74.125.224.211
, karena ini adalah alamat IP yang dikembalikan oleh nslookup.
Namun, saya tidak bisa melakukannya dengan alamat IP yang dikembalikan dari www.yahoo.com. Bagaimana cara saya pergi ke halaman pencarian Yahoo dengan IP-nya?
Contoh lain, http://www.allaboutcircuits.com
akan diselesaikan 68.233.243.63
oleh server DNS, tetapi jika saya pergi ke http://68.233.243.63
, saya mendapatkan "Halo dunia!".
Kedua, karena alasan tertentu, ada sesuatu yang salah dengan resolver DNS dengan layanan hosting web saya (tidak akan diperbaiki !!) . Jadi perintah suka
get_file_contents("http://www.allaboutcircuits.com");
akan kembali php_network_getaddresses: getaddrinfo failed: Name or service not known
Bagaimana saya menyiasati ini dengan alamat IP,
68.233.243.63
Maksud saya, entah bagaimana lampirkan parameter nama host HTTP get_file_contents()
?
Saya ingin menyelesaikan ini di pihak saya sendiri (dalam kode saya), tidak ada pemecahan masalah / penyesuaian yang akan dilakukan oleh admin server.
sumber
Jawaban:
Dalam skrip PHP Anda, ketika Anda mengaksesnya dengan alamat IP, Anda juga perlu mengirim
Host:
header dalam permintaan Anda dengan nama domain yang benar.Pertanyaan tentang Stack Overflow ini menjelaskan cara melakukannya: /programming/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call
sumber
Seperti yang dikatakan wallyk, ini adalah server virtual
Ambil contoh ini untuk apache
Di c: \ www \ example.com buat file indeks yang mengatakan "Hello World! Example.com"
di c: \ www \ example2.com membuat file indeks yang mengatakan "Dunia Hellow! example2.com"
Dan ubah file host Anda menjadi
Lalu pergi ke http://example.com lalu pergi ke http://example2.com
Jadi begitulah cara Anda dapat memiliki beberapa situs per ip tunggal
Jadi pada dasarnya jawabannya adalah, tidak, Anda tidak akan bisa mendapatkan situs itu dari ip.
sumber
Host
header yang diperlukan agar server dapat membedakan antara situs web yang dihostingnya dan melayani yang benar.Anda mengatakan Anda ingin secara manual menentukan nama host dan alamat IP, alih-alih mengandalkan server DNS di luar kendali Anda. Melihat komentar di dokumentasi file_get_contents , saya melihat komentator di sana telah memecahkan masalah yang sama dengan menciptakan konteks yang berisi Host: header yang diperlukan. Sesuatu seperti ini:
Tentu saja, perlu diketahui bahwa kerugian untuk menentukan secara manual baik nama host dan alamat IP adalah bahwa jika alamat IP berubah di masa mendatang (misalnya, jika situs pindah ke penyedia hosting baru), kode Anda dapat berhenti berfungsi hingga Anda memperbarui alamat IP secara manual.
sumber
Alamat IP saja tidak cukup untuk mengidentifikasi secara unik situs yang ingin Anda kunjungi ketika beberapa host virtual berjalan pada port / server yang sama. Dalam hal ini, Anda perlu menentukan header Host dalam permintaan HTTP yang mengidentifikasi nama server. Anda dapat melakukan ini secara langsung melalui telnet ke port 80:
tempat Anda mengetik perintah telnet, dan baris GET dan Host, lalu dapatkan kode sumber HTML kembali dari server.
Atau Anda dapat menggunakan ikal di mana Anda secara khusus menambahkan header (dengan
-H
bendera).sumber
Anda bisa menggunakan server DNS lain di sisi klien, kalau-kalau itu bukan host web — 8.8.8.8 dan 8.8.8.6 dijalankan oleh Google, dan 4.4.4.2 adalah siaga umum. Namebench akan membiarkan Anda menemukan yang tercepat. Atau, Anda dapat menggunakan layanan proxy dari beberapa jenis (saya menjalankan sendiri pada VPS, atau menggunakan Tor, tetapi ada opsi lain).
Karena ini adalah PHP, opsi yang lebih mudah adalah menjalankan kode pada sistem lain. Kludges tidak bisa dirawat.
sumber