Saya memiliki pengaturan pekerjaan cron di satu server untuk menjalankan skrip cadangan di PHP yang di-host di server lain. Perintah yang saya gunakan memiliki format seperti ini:
curl -sS http://www.example.com/backup.php
Akhir-akhir ini saya mendapatkan kesalahan ini saat Cron bekerja
curl: (52) Empty reply from server
Saya tidak tahu apa artinya ini. Jika saya membuka tautan langsung di browser saya, skrip berjalan dengan baik dan saya mendapatkan file zip cadangan kecil saya.
Adakah yang bisa memberikan informasi tentang itu?
curl
waktu tunggu? Sudahkah Anda mencoba meningkatkan curl default menunggu untuk terhubung dengan--connect-timeout <seconds>
dan untuk seluruh operasi--max-time <seconds>
?Jawaban:
Ini bisa terjadi jika curl diminta untuk melakukan HTTP biasa di server yang melakukan HTTPS.
Contoh:
sumber
curl localhost:8443
memberi saya kesalahan balasan kosong.curl -k https://localhost:8443
menyajikan halaman dengan benar.Curl memberikan kesalahan ini ketika tidak ada balasan dari server, karena itu adalah kesalahan HTTP untuk tidak menanggapi permintaan apa pun.
Saya menduga masalah yang Anda hadapi adalah ada beberapa bagian dari infrastruktur jaringan, seperti firewall atau proxy, antara Anda dan host yang dimaksud. Oleh karena itu, agar ini berfungsi, Anda akan diminta untuk mendiskusikan masalah ini dengan orang yang bertanggung jawab atas perangkat keras tersebut.
sumber
Dalam kasus saya itu adalah pengalihan server;
curl -L
memecahkan masalah saya.sumber
Itu bisa terjadi ketika server tidak merespons karena penggunaan CPU atau Memori 100%.
Saya mendapat kesalahan ini ketika saya mencoba mengakses API sonarqube dan server tidak merespons karena penggunaan memori penuh
sumber
Alasan umum lainnya untuk balasan kosong adalah waktu tunggu. Periksa semua lompatan dari tempat tugas cron dijalankan dari ke server PHP / target Anda. Mungkin ada perangkat / server / nginx / LB / proxy di suatu tempat di sepanjang baris yang menghentikan permintaan lebih awal dari yang Anda harapkan, menghasilkan respons kosong.
sumber
Dalam kasus koneksi SSL, ini mungkin disebabkan oleh masalah di versi lama server nginx yang segfault selama permintaan curl dan Safari. Bug ini telah diperbaiki sekitar versi 1.10 dari nginx tetapi masih ada banyak versi lama nginx di internet.
Untuk admin nginx: menambahkan
ssl_session_cache shared:SSL:1m;
kehttp
blok seharusnya menyelesaikan masalah.Saya menyadari bahwa OP meminta kasus non-SSL tetapi karena ini adalah halaman teratas di goole untuk masalah "balasan kosong dari server", saya meninggalkan jawaban SSL di sini karena saya adalah salah satu dari banyak yang membenturkan kepala saya melawan dinding dengan masalah ini.
sumber
Dalam kasus saya, ini disebabkan oleh masalah PHP APC. Tempat pertama untuk melihat adalah log kesalahan Apache (jika Anda menggunakan Apache).
Semoga ini bisa membantu seseorang.
sumber
kesalahan ini juga dapat terjadi jika server sedang memproses data. Ini biasanya terjadi pada saya ketika saya memposting beberapa file ke situs web REST API yang memiliki banyak entri dan membutuhkan waktu lama untuk pembuatan dan pengembalian catatan
sumber
Anda dapat mencoba curl -sS ini " http://www.example.com/backup.php " dengan memasukkan URL Anda ke "" yang berhasil bagi saya, saya tidak tahu alasan tepatnya, tetapi saya rasa meletakkan url ke " "menyelesaikan permintaan ke server atau hanya menyelesaikan permintaan header.
sumber
Saya pernah mengalami masalah ini sebelumnya. Tahu saya punya aplikasi lain menggunakan port yang sama (3000).
Cara mudah untuk mengetahuinya:
Di terminal, ketik
netstat -a -p TCP -n | grep 3000
(gantikan port yang Anda gunakan untuk '3000'). Jika ada lebih dari satu yang mendengarkan, sesuatu yang lain sudah menempati port itu. Anda harus menghentikan proses itu atau mengubah port untuk proses baru Anda.sumber
Dalam kasus saya (curl 7.47.0), itu karena saya mengatur header
content-length
pada perintah curl secara manual dengan nilai yang dihitung oleh tukang pos (saya menggunakan tukang pos untuk menghasilkan parameter perintah curl dan menyalinnya ke shell). Setelah saya menghapus headercontent-length
, ini berfungsi normal.sumber
Coba ini -> Alih-alih 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 menyambungkan (tetapi tidak dapat membantu mengaburkannya dari Anda). Sekarang, bergantung pada apa yang Anda lihat di sini, Anda mungkin menarik salah satu dari beberapa kesimpulan:
Anda mencoba menyambung ke situs web yang merupakan host virtual berbasis nama, artinya tidak dapat dijangkau melalui alamat IP. Ada yang salah dengan nama host — Anda mungkin salah mengetik. Perhatikan bahwa menggunakan GET daripada POST untuk parameter akan memberi Anda jawaban yang lebih konkret.
Masalahnya mungkin juga terkait dengan header 100-lanjutkan. Coba lari
curl_getinfo($ch, CURLINFO_HTTP_CODE)
, dan periksa hasilnya.sumber
telnet hostname
danGET <url>
Kasus saya karena sertifikat SSL kedaluwarsa
sumber
Dalam kasus saya, saya menggunakan uwsgi, menambahkan properti http-timeout selama lebih dari 60 detik tetapi tidak berfungsi karena beberapa ruang ekstra dan file konfigurasi tidak dimuat dengan benar.
sumber
Itu terjadi ketika Anda mencoba mengakses Situs Web aman seperti Https.
Saya harap Anda melewatkan 's'
Coba Ubah URL menjadi curl -sS -u "username: password" https://www.example.com/backup.php
sumber