Menggunakan Apache atau Ngnix Saya selalu membuat situs pengembangan berdasarkan proyek nyata seperti http://project1.loc
yang, setelah menambahkan ke .hosts
file saya , browser tidak memiliki masalah dalam menggunakannya.
Namun, ketika saya mencoba membuat permintaan cURL ( http://project1.loc/post.json
) ke URL yang sama, saya tidak pernah mendapatkan apa pun selain batas waktu. Saya berasumsi cURL tidak peduli dengan host khusus saya dan langsung menuju ke server nama untuk infonya.
Bagaimana cara memperbaikinya?
PEMBARUAN Saya menetapkan tajuk khusus "HOST: http: //project1.loc " dan sekarang saya mendapatkan 400 kesalahan - tetapi kesalahan itu terjadi seketika jadi saya berasumsi bahwa cURL setidaknya menggunakan file host ...
EDIT: Meskipun ini adalah jawaban yang diterima saat ini, pembaca mungkin menemukan jawaban lain ini oleh pengguna John Hart lebih disesuaikan dengan kebutuhan mereka. Ini menggunakan opsi yang, menurut pengguna Ken , diperkenalkan di versi 7.21.3 (yang dirilis pada Desember 2010 , yaitu setelah jawaban awal ini).
Dalam pertanyaan yang Anda edit, Anda menggunakan URL sebagai nama host, sedangkan itu harus berupa nama host saja.
Mencoba:
di mana
project1.loc
adalah hanya nama host dan127.0.0.1
adalah alamat IP target.(Jika Anda menggunakan curl dari pustaka dan bukan pada baris perintah, pastikan Anda tidak meletakkannya
http://
diHost
tajuk.)sumber
HOST
header.Host
tidakHOST
berjaga-jaga (meskipun menurut saya seharusnya tidak peka huruf besar-kecil). Seperti yang saya katakan, pastikan Anda hanya menggunakan nama host diHost
header, tidak ada yang lain (tidakhttp://
dan tidak/something
setelah). Bagaimana Anda mengatur file host Anda?Gunakan nama domain yang benar-benar memenuhi syarat (seperti
dev.yourdomain.com
) yang mengarah ke127.0.0.1
atau coba edit file host yang tepat (biasanya / etc / hosts di lingkungan * nix).sumber
system32/drivers/etc/hosts
Sepertinya ini bukan masalah yang tidak biasa.
Periksa ini dulu.
Jika itu tidak membantu, Anda dapat menginstal server DNS lokal di Windows, seperti ini . Konfigurasikan Windows untuk menggunakan localhost sebagai server DNS. Server ini dapat dikonfigurasi agar otoritatif untuk domain palsu apa pun yang Anda butuhkan, dan untuk meneruskan permintaan ke server DNS nyata untuk semua permintaan lainnya.
Saya pribadi berpikir ini agak berlebihan, dan tidak dapat melihat mengapa file host tidak berfungsi. Tapi itu harus menyelesaikan masalah yang Anda alami. Pastikan Anda juga mengatur server DNS normal Anda sebagai penerus.
sumber
Apakah server benar-benar mendapatkan permintaan, dan apakah Anda menangani nama host (alias) dengan benar?
Periksa log server web Anda, untuk melihat bagaimana permintaan itu masuk ...
curl memiliki opsi untuk membuang permintaan yang dikirim, dan respons diterima, itu disebut jejak, yang akan disimpan ke file.
--jejak
Jika Anda kehilangan informasi host atau header - Anda dapat memaksa header tersebut dengan opsi konfigurasi.
Saya akan mendapatkan permintaan curl yang bekerja pada baris perintah, dan kemudian mencoba menerapkannya di PHP.
opsi konfigurasinya adalah
-K / - config
opsi yang relevan dengan curl ada di sini
--trace Mengaktifkan trace dump lengkap dari semua data yang masuk dan keluar, termasuk informasi deskriptif, ke file keluaran yang diberikan. Gunakan "-" sebagai nama file agar keluaran dikirim ke stdout.
-K / - config Tentukan file konfigurasi untuk membaca argumen curl. File konfigurasi adalah file teks di mana argumen baris perintah dapat ditulis yang kemudian akan digunakan seolah-olah ditulis pada baris perintah yang sebenarnya. Opsi dan parameternya harus ditentukan pada baris file konfigurasi yang sama, dipisahkan oleh spasi, titik dua, tanda sama dengan atau kombinasinya (namun, pemisah yang disukai adalah tanda sama dengan). Jika parameter berisi spasi, parameter harus diapit dalam tanda kutip. Dalam tanda kutip ganda, tersedia urutan escape berikut: \, \ ", \ t, \ n, \ r dan \ v. Garis miring terbalik sebelum huruf lainnya diabaikan. Jika kolom pertama dari baris konfigurasi adalah '#' karakter, sisa baris akan diperlakukan sebagai komentar.
sumber
http://domain.loc/users/getSettings.xml
dan inilah yang ditunjukkan oleh access.log127.0.0.1 - - [09/Aug/2010:11:42:55 -0500] "POST /users/getSettings.xml HTTP/1.1" 499 0 "-" "-"
dan curl.Operation timed out after 10000 milliseconds with 0 bytes received
Jadi saya kira cURL sebenarnya menangani vhost karena access.log menunjukkan permintaan tersebut. Kemudian lagi, sekarang mungkin membuatnya ke domain yang benar ...Membuat permintaan untuk
Menghasilkan
-H
file log yang berisi:File host saya terlihat seperti:
sumber
-H
adalah untuk header lengkap, bukan hanya host, jadi gunakan-H 'Host: project1.loc'
. Selain itu, meskipun ada masalah ini, permintaan ini tampaknya berfungsi pada host yang benar (diperoleh dengan benar darihosts
file Anda dengan setidaknya menggunakan curl pada baris perintah). Apa yang tidak berfungsi (403) sepertinya merupakan masalah otentikasi / otorisasi, jadi sepertinya server Anda memblokir permintaan ini. Saya sarankan untuk memperbaiki konfigurasi server untuk ini.Untuk menyiapkan host virtual di server http Apache yang belum terhubung melalui DNS, saya suka menggunakan:
Di mana nama host adalah alamat IP atau nama DNS dari mesin yang menjalankan server web. Ini juga berfungsi dengan baik untuk https-Sites.
sumber