Saya ingin tahu cara melanjutkan pemecahan masalah mengapa permintaan ikal ke server web tidak berfungsi. Saya tidak mencari bantuan yang tergantung pada lingkungan saya, saya hanya ingin tahu cara mengumpulkan informasi tentang bagian komunikasi yang gagal, nomor port, dll.
chad-integration:~ # curl -v 111.222.159.30
* About to connect() to 111.222.159.30 port 80 (#0)
* Trying 111.222.159.30... connected
* Connected to 111.222.159.30 (111.222.159.30) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0 OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
> Host: 111.222.159.30
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 111.222.159.30 left intact
curl: (52) Empty reply from server
* Closing connection #0
Jadi, saya mengerti bahwa respons kosong berarti bahwa curl tidak mendapatkan respons dari server. Tidak masalah, justru itulah yang saya coba cari tahu.
Tapi info apa lagi yang bisa saya dapatkan dari CURL di sini?
Itu berhasil "terhubung", jadi tidakkah itu melibatkan komunikasi dua arah? Jika demikian, lalu mengapa tanggapannya tidak juga datang? Catatan, saya telah memverifikasi layanan saya sudah habis dan mengembalikan tanggapan.
Catatan, saya agak hijau di tingkat jaringan ini, jadi jangan ragu untuk memberikan beberapa materi orientasi umum.
Jawaban:
Anda mungkin perlu memecahkan masalah ini dari sisi server, bukan sisi klien. Saya yakin Anda mengacaukan 'respons kosong' dengan 'tidak ada respons'. Mereka tidak bermaksud hal yang sama. Kemungkinan Anda mendapatkan balasan yang tidak mengandung data apa pun.
Anda dapat menguji ini dengan hanya menggunakan telnet daripada melalui curl:
Setelah terhubung, rekatkan yang berikut ini (diambil dari output ikal Anda):
Anda harus melihat respons persis seperti yang dilihat oleh ikal.
Salah satu kemungkinan alasan Anda mendapat balasan kosong adalah karena Anda mencoba membuka situs web yang merupakan host virtual berbasis nama. Jika itu masalahnya, tergantung pada konfigurasi server (situs yang Anda coba tekan kebetulan dikonfigurasikan sebagai default), Anda tidak dapat mencapai situs dengan alamat IP tanpa sedikit kerja.
Anda dapat mengujinya di sisi klien hanya dengan mengubah baris 'Host' di atas; ganti www.example.com dengan situs yang ingin Anda jangkau:
sumber
* Empty reply from server
dari curl, menghubungkan langsung menunjukkan semua header http yang relevan dengan tubuh yang murni terdiri dari<!-- b5 -->
. Jika ia bekerja dengan curl di tempat lain dan tidak pada satu jaringan tertentu, saya akan melihat perbedaan pada jaringan itu. Proksi yang berperilaku buruk mungkin?Curl baik-baik saja, tetapi tidak memberikan banyak umpan balik ketika ada masalah. (Seperti yang Anda tahu) wget dapat memberi Anda informasi lebih lanjut, tetapi seperti yoonix menyebutkan, sisi Server (yaitu log kesalahan server web) adalah tempat untuk mencari.
Anda dapat mengatur nama host juga dengan
sumber
Coba ini -> Daripada melalui CURL, coba ping situs yang Anda coba jangkau dengan Telnet. Respons yang dikembalikan oleh upaya koneksi Anda akan persis seperti yang dilihat CURL saat mencoba terhubung (tapi tidak berhasil jika tidak Anda gunakan). Sekarang, tergantung pada apa yang Anda lihat di sini, Anda mungkin menarik satu dari beberapa kesimpulan:
Anda sedang mencoba untuk terhubung ke situs web yang merupakan host virtual berbasis nama, yang berarti itu tidak dapat dicapai melalui alamat IP. Ada yang salah dengan nama host - Anda mungkin salah ketik. Perhatikan bahwa menggunakan GET daripada POST untuk parameter akan memberi Anda jawaban yang lebih konkret.
Masalah ini juga dapat dikaitkan dengan tajuk 100-lanjut. Coba jalankan curl_getinfo ($ ch, CURLINFO_HTTP_CODE), dan periksa hasilnya.
sumber
getinfo
flag atau fitur untuk CLI cURL. @lihat curl.haxx.seDalam beberapa kesempatan di bawah WSL Windows. Menjalankan curl di dalam bash akan menghasilkan kesalahan yang sama dan itu karena Kasperksy memblokirnya agar tidak terhubung ke HTTP / s.
Bug ini telah dilaporkan di sini .
Solusi cepat adalah dengan menonaktifkan perlindungan Kaspersky pada port yang Anda coba jangkau di server (tcp 80 untuk exmaple).
Ini dilakukan dengan masuk ke Kaspersky - Pengaturan - Pengaturan Jaringan - centang "Pantau port terpilih saja" - Pilih port - klik ganda pada port (80) dan pilih tidak aktif
sumber