Curl Hatası 52 Sunucudan boş yanıt


99

Başka bir sunucuda barındırılan PHP'de bir yedekleme komut dosyasını çalıştırmak için bir sunucuda bir cron işi kurulumum var. Kullanmakta olduğum komut şu şekilde biçimlendirilmiş:

curl -sS http://www.example.com/backup.php

Son zamanlarda Cron çalıştığında bu hatayı alıyorum

curl: (52) Empty reply from server

Bunun ne anlama geldiğine dair hiçbir fikrim yok. Bağlantıya doğrudan tarayıcımda gidersem, komut dosyası sorunsuz çalışır ve küçük yedek zip dosyamı alırım.

Herhangi biri bununla ilgili herhangi bir bilgi verebilir mi?


Curl, çıktı veren dosya işlemcisinin ne olduğu umurunda olmadığından, bunun PHP ile hiçbir ilgisi yoktur.
Kevin Peno

1
Yedek komut dosyanız curlzaman aşımına neden olacak kadar uzun süre çalışıyor olabilir mi? Bağlanmak --connect-timeout <seconds>ve tüm işlemin gerçekleştirilmesi için varsayılan kıvrılma bekleme sürelerini artırmayı denediniz --max-time <seconds>mi?
Yzmir Ramirez

@YzmirRamirez curl zaman aşımı hata kodu 28'dir. Src: ec.haxx.se/usingcurl-timeouts.html
Luckylooke

Docker + Uvicorn (FastAPI) ile --host 0.0.0.0
TechWisdom

Yanıtlar:


74

Bu, curl'den HTTPS yapan bir sunucuda düz HTTP yapması istenirse gerçekleşebilir.

Misal:

$ curl http://google.com:443
curl: (52) Empty reply from server

7
Benim durumumdaki durum buydu. curl localhost:8443bana boş cevap hatası verdi. curl -k https://localhost:8443sayfayı düzgün bir şekilde sundu.
lowly_junior_sysadmin

1
Tökezledim ve eksikleri tamamen kaçırdım. Neden daha net bir hata olmadığını merak ediyorum (bağlantının reddedilmesi gibi bile: daha mantıklı olacaktır).
ShinTakezou

45

Curl, HTTP'nin bir isteğe hiçbir şeyi yanıtlamaması nedeniyle bir sunucudan yanıt gelmediğinde bu hatayı verir.

Sanırım sorun, siz ve söz konusu ana bilgisayar arasında bir güvenlik duvarı veya proxy gibi bir ağ altyapısı parçası olması. Bu nedenle, bunun işe yaraması, sorunu o donanımdan sorumlu kişilerle tartışmanızı gerektirecektir.


19
Bu muhtemelen sorun gidermeye yönelik yanlış bir yaklaşımdır. Boş yanıt, IP / bağlantı noktasına bağlanabildiği, ancak sunucu yanıtta hiçbir şey döndürmediği anlamına gelir. Muhtemelen hizmetin kendisinde bir sorun var.
Robert Christian

4
Pek iyi değil. Bu benim başıma geldiğinde, bunun nedeni kimlik doğrulama proxy'imin uzak ana bilgisayara bağlanmamasıydı. Yani gerçekte hizmetin kendisinde bir sorun yoktu.
Steve Knight

Benim durumumda, sunucunun çalıştığı geri döngü arayüzü için devre dışı bırakılan proxy'm var.
rbaleksandar

Benim durumumda, sabit sürücü alanı kalmamış bir NGINX web önbellek sunucusu.
Alien Life Form


9

% 100 CPU veya Bellek kullanımı nedeniyle sunucu yanıt vermediğinde ortaya çıkabilir.

Sonarqube API'ye erişmeye çalışırken bu hatayı aldım ve sunucu tam bellek kullanımı nedeniyle yanıt vermiyor


8

Boş bir yanıtın diğer bir yaygın nedeni zaman aşımıdır. Cron işinin PHP / hedef sunucunuza çalıştığı yerden tüm atlamaları kontrol edin. Muhtemelen hat üzerinde bir yerde, isteği beklediğinizden önce sonlandıran ve boş bir yanıtla sonuçlanan bir cihaz / sunucu / nginx / LB / proxy vardır.


5

SSL bağlantıları durumunda bunun nedeni, curl ve Safari istekleri sırasında segfault yapan nginx sunucusunun eski sürümlerindeki sorun olabilir. Bu hata , nginx'in 1.10 sürümü civarında düzeltildi, ancak internette hala birçok eski nginx sürümü var.

Nginx yöneticileri için: ekleme ssl_session_cache shared:SSL:1m;için httpbloğun sorunu çözmek gerekir.

OP'nin SSL olmayan destek talebinde bulunduğunun farkındayım, ancak bu "sunucudan boş yanıt" sorunu için goole'deki en üst sayfa olduğundan, kafamı çarpan birçok kişiden biri olduğum için SSL yanıtını burada bırakıyorum bu konu ile duvara karşı.


3

Benim durumumda buna bir PHP APC problemi neden oldu. Bakılacak ilk yer Apache hata günlükleridir (Apache kullanıyorsanız).

Umarım bu birine yardımcı olur.


Biraz daha açıklayabilir misin? APC buna nasıl neden olabilir? Bunu PHP içinde bile çalıştırmıyorum, sadece komut satırı kullanıyorum.
Nino Škopac

Bu çok uzun zaman önceydi, bu sorunun nedeninin APC olduğunu hatırlayamıyorum. Üzgünüm yardım edemem.
Andrew McCombe

2

bu hata, sunucu verileri işliyorsa da ortaya çıkabilir. REST API web sitelerine çok sayıda girişi olan ve kayıtların oluşturulması ve geri dönmesi uzun süren bazı dosyalar gönderdiğimde genellikle başıma geliyor


1

Bu curl -sS " http://www.example.com/backup.php " yi, URL'nizi "" benim için çalışan "" kısmına koyarak deneyebilirsiniz . Tam sebebini bilmiyorum ama sanırım url'yi " "sunucuya yapılan isteği tamamlar veya sadece başlık isteğini tamamlar.


1

Bu sorunu daha önce yaşadım. Aynı bağlantı noktasını (3000) kullanan başka bir uygulamam olduğunu anladım.

Bunu öğrenmenin kolay yolu:

Terminale yazın netstat -a -p TCP -n | grep 3000('3000' yerine kullandığınız bağlantı noktasını yazın ). Birden fazla dinleme varsa, o bağlantı noktasını zaten başka bir şey işgal ediyor. Bu işlemi durdurmalı veya yeni işleminiz için bağlantı noktasını değiştirmelisiniz.


2
Bu bahsettiğiniz çok özel bir durum. Bu genel olarak curl'nin size bu yanıtı vermesinin nedeni değildir. Bu sorunun istemci tarafında değil sunucu tarafında ele alınması gerektiği ortaya çıktı. Bu I anlaşılacaktır yerdir.
Aashish Chaubey

1

Benim durumumda (curl 7.47.0), content-lengthpostacı tarafından hesaplanan bir değerle curl komutuna başlığı manuel olarak ayarladığım içindir (curl komut parametrelerini oluşturmak ve bunları kabuğa kopyalamak için postacı kullandım). Başlığı sildikten sonra content-lengthnormal çalışıyor.


0

Deneyin bu -> Bunun yerine cURL geçiyor, sen Telnet ile ulaşmaya çalıştığınız siteyi ping deneyin. Bağlantı girişiminizin döndürdüğü yanıt, tam olarak cURL'nin bağlanmaya çalıştığında gördüğü şey olacaktır (ancak bunu size yardımcı olmadan şaşırtacaktır). Şimdi, burada ne gördüğünüze bağlı olarak, birkaç sonuçtan birini çıkarabilirsiniz:

İsme dayalı bir sanal ana bilgisayar olan bir web sitesine bağlanmaya çalışıyorsunuz, yani IP adresi üzerinden erişilemiyor. Ana bilgisayar adıyla ilgili bir sorun oluştu - bir şeyi yanlış yazmış olabilirsiniz. Parametreler için POST yerine GET kullanmanın size daha somut bir cevap vereceğini unutmayın.

Sorun ayrıca 100 devam başlığına da bağlı olabilir. Koşmayı deneyin curl_getinfo($ch, CURLINFO_HTTP_CODE)ve sonucu kontrol edin.


İlginç bir nokta. HTML'yi yanıt olarak telnet hostnameGET <url>
alabildim

0

Durumum SSL sertifikasının sona ermesinden kaynaklanıyor


-1

Benim durumumda uwsgi kullanıyordum, 60 saniyeden daha uzun bir süre için http-timeout özelliğini ekledim, ancak biraz fazla alan nedeniyle çalışmıyordu ve yapılandırma dosyası düzgün yüklenmiyordu.


-2

Https gibi güvenli Web Sitesine erişmeye çalıştığınızda gerçekleşir.

Umarım 's'lerini kaçırmışsındır

URL'yi curl -sS -u "kullanıcı adı: şifre" https://www.example.com/backup.php olarak değiştirmeyi deneyin


3
Kesinlikle hayır. Ve btw basit kimlik doğrulaması "kullanıcı adı: şifre" nin https ile ne ilgisi var?
Nino Škopac

cevabın kimlik doğrulama kısmı, bunu cevaba eklemenin neden garip olduğunu bilmediğinizi gösteriyor.
Skid Kadda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.