कर्ल त्रुटि 52 सर्वर से खाली उत्तर


99

मेरे पास PHP में बैकअप स्क्रिप्ट चलाने के लिए एक सर्वर पर एक क्रोन जॉब सेटअप है जो दूसरे सर्वर पर होस्ट किया गया है। मैं जिस कमांड का उपयोग कर रहा हूं वह इस तरह से स्वरूपित है:

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

हाल ही में मुझे यह त्रुटि तब मिली है जब क्रोन चलता है

curl: (52) Empty reply from server

मुझे इसका मतलब नहीं मालूम है। अगर मैं अपने ब्राउज़र में सीधे लिंक पर जाता हूं तो स्क्रिप्ट ठीक चलती है और मुझे मेरी छोटी बैकअप ज़िप फ़ाइल मिल जाती है।

क्या कोई इसके बारे में कोई जानकारी दे सकता है?


यह वास्तव में PHP के साथ कुछ नहीं करना है क्योंकि कर्ल को परवाह नहीं है कि आउटपुट फाइल प्रोसेसर क्या है।
केविन पेनो

1
क्या आपकी बैकअप स्क्रिप्ट इतनी लंबी चल सकती है कि यह curlटाइमआउट का कारण बनती है ? क्या आपने --connect-timeout <seconds>पूरे कर्ल के साथ जुड़ने के लिए डिफ़ॉल्ट कर्ल प्रतीक्षा को बढ़ाने की कोशिश की है --max-time <seconds>?
यज़्मीर रामिरेज़

@YzmirRamirez कर्ल टाइमआउट एरर कोड 28 है। Src: ec.haxx.se/usingcurl-timeouts.html
Luckylooke

Docker + Uvicorn (FastAPI) के साथ इसने मुझे सेट करने में मदद की --host 0.0.0.0
TechWisdom

जवाबों:


74

ऐसा तब हो सकता है जब कर्ल को HTTPS करने वाले सर्वर पर सादा HTTP करने के लिए कहा जाता है।

उदाहरण:

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

7
मेरे मामले में यही स्थिति थी। curl localhost:8443मुझे खाली उत्तर त्रुटि दी। curl -k https://localhost:8443पृष्ठ को ठीक से परोस दिया।
नीच_जुनियोर_सैसदिन

1
मैं बस इस पर ठोकर खाई है और मैं पूरी तरह से लापता याद किया। मुझे आश्चर्य है कि क्यों एक अधिक स्पष्ट त्रुटि नहीं है (यहां तक ​​कि जैसे कनेक्शन ने इनकार कर दिया: यह अधिक समझ में आता है)।
शिनटेकजेउ

45

सर्वर से कोई उत्तर नहीं मिलने पर कर्ल यह त्रुटि देता है, क्योंकि यह HTTP के लिए एक अनुरोध के लिए कुछ भी जवाब नहीं देने के लिए एक त्रुटि है।

मुझे संदेह है कि आपके पास समस्या यह है कि नेटवर्क इन्फ्रास्ट्रक्चर का कुछ टुकड़ा है, जैसे कि फ़ायरवॉल या प्रॉक्सी, आपके और मेजबान के बीच प्रश्न में है। इसलिए, यह काम करने के लिए, आपको उस हार्डवेयर के लिए जिम्मेदार लोगों के साथ इस मुद्दे पर चर्चा करने की आवश्यकता होगी।


19
यह समस्या निवारण के लिए गलत दृष्टिकोण की संभावना है। खाली उत्तर का मतलब है कि यह आईपी / पोर्ट से कनेक्ट करने में सक्षम था, लेकिन सर्वर ने उत्तर में कुछ भी नहीं लौटाया। यह स्वयं सेवा पर एक समस्या है।
रॉबर्ट क्रिश्चियन

4
खैर, काफी नहीं। जब मेरे साथ ऐसा हुआ था, क्योंकि मेरा प्रामाणिक प्रॉक्सी दूरस्थ होस्ट से कनेक्ट नहीं हो रहा था। इसलिए वास्तव में सेवा पर कोई समस्या नहीं थी।
स्टीव नाइट

मेरे मामले में मेरे पास प्रॉक्सी है, जो लूपबैक इंटरफ़ेस के लिए अक्षम है जहां सर्वर चल रहा है।
rbaleksandar

मेरे मामले में एक NGINX वेब कैश सर्वर है जिसमें कोई हार्ड ड्राइव स्थान नहीं बचा है।
एलियन लाइफ फॉर्म


9

यह तब हो सकता है जब सर्वर 100% सीपीयू या मेमोरी उपयोग के कारण प्रतिक्रिया नहीं करता है।

मुझे यह त्रुटि तब मिली जब मैं सोनारक्बी एपीआई का उपयोग करने की कोशिश कर रहा था और सर्वर पूर्ण मेमोरी उपयोग के कारण जवाब नहीं दे रहा था


8

खाली उत्तर के लिए एक और सामान्य कारण टाइमआउट है। उन सभी हॉप्स की जांच करें जहां से क्रोन जॉब आपके PHP / लक्ष्य सर्वर पर चल रहा है। वहाँ शायद एक उपकरण / सर्वर / nginx / LB / छद्म कहीं लाइन के साथ है जो आपके द्वारा अपेक्षा से पहले के अनुरोध को समाप्त करता है, जिसके परिणामस्वरूप रिक्त प्रतिक्रिया होती है।


5

एसएसएल कनेक्शन के मामले में यह नगनेक्स सर्वर के पुराने संस्करणों में समस्या के कारण हो सकता है जो कर्ल और सफारी अनुरोधों के दौरान सेगफॉल्ट करता है। यह बग नगणक्स के संस्करण १.१० के आसपास तय किया गया था, लेकिन अभी भी इंटरनेट पर नगीनेक्स के कई पुराने संस्करण मौजूद हैं।

नेगनेक्स प्रवेश के लिए: ब्लॉक में जोड़ने ssl_session_cache shared:SSL:1m;से httpसमस्या का समाधान होना चाहिए।

मुझे पता है कि ओपी गैर-एसएसएल मामले के लिए पूछ रहा था, लेकिन चूंकि यह "सर्वर से खाली उत्तर" समस्या के लिए goole में शीर्ष पृष्ठ है, इसलिए मैं एसएसएल उत्तर को यहां छोड़ रहा हूं क्योंकि मैं उनमें से एक था जो मेरे सिर को पीट रहा था इस मुद्दे के साथ दीवार के खिलाफ।


3

मेरे मामले में यह एक PHP एपीसी समस्या के कारण था। देखने के लिए पहला स्थान अपाचे त्रुटि लॉग होगा (यदि आप अपाचे का उपयोग कर रहे हैं)।

आशा है कि यह किसी की मदद करता है।


क्या आप थोड़ा और समझा सकते हैं? एपीसी के कारण यह कैसे हो सकता है? मैं इसे पीएचपी के अंदर भी नहीं चला रहा हूं, मैं सिर्फ कमांड लाइन का उपयोग कर रहा हूं।
नीनो स्कोपैक

यह बहुत पहले था, मैं एपीसी के इस मुद्दे का कारण होने का कारण याद नहीं कर सकता। क्षमा करें, मैं मदद नहीं कर सकता।
एंड्रयू मैककॉम्ब

2

यदि सर्वर डेटा को संसाधित कर रहा है तो यह त्रुटि भी हो सकती है। यह आमतौर पर मेरे साथ होता है जब मैं REST API वेबसाइटों में कुछ फाइलें पोस्ट करता हूं जिनमें कई प्रविष्टियां होती हैं और रिकॉर्ड बनाने और वापस आने में लंबा समय लगता है


1

आप इस यूआरएल को " http://www.example.com/backup.php " अपने URL को "" में डालकर आज़मा सकते हैं, जो मेरे लिए काम करता है, मुझे इसका सही कारण पता नहीं है, लेकिन मुझे लगता है कि यूआरएल डालने में " "सर्वर के अनुरोध को पूरा करता है या हेडर के अनुरोध को पूरा करता है।


1

मुझे यह समस्या पहले भी हो चुकी है। पता लगाया कि मेरे पास उसी बंदरगाह (3000) का उपयोग करके एक और एप्लिकेशन था।

इसका पता लगाने का आसान तरीका:

टर्मिनल में, टाइप करें netstat -a -p TCP -n | grep 3000('3000' के लिए आपके द्वारा उपयोग किए जा रहे पोर्ट का विकल्प)। यदि एक से अधिक सुनने वाले हैं, तो कुछ और पहले से ही उस बंदरगाह पर कब्जा कर रहा है। आपको उस प्रक्रिया को रोकना चाहिए या अपनी नई प्रक्रिया के लिए पोर्ट बदलना चाहिए।


2
यह एक बहुत विशिष्ट मामला है जिसका आपने उल्लेख किया है। यह सामान्य रूप से नहीं है, क्यों कर्ल आपको यह प्रतिक्रिया देता है। यह बताता है कि इस मुद्दे को सर्वर की ओर से निपटाया जाना चाहिए, न कि ग्राहक पक्ष को। यह वह जगह है जहाँ मैंने समझा।
आशीष चौबे

1

मेरे मामले में (कर्ल 7.47.0), यह इसलिए है क्योंकि मैंने content-lengthकर्ल कमांड पर हेडर को मैन्युअल रूप से एक मान के साथ सेट किया है, जो पोस्टमैन द्वारा गणना की जाती है (मैंने पोस्टमैन का उपयोग कर्ल कमांड पैरामीटर उत्पन्न करने और उन्हें शेल में कॉपी करने के लिए किया है)। हेडर को हटाने के बाद content-length, यह सामान्य रूप से काम करता है।


0

प्रयास करें इस -> इसके बजाय cURL से गुजर रही है, साइट पर आप टेलनेट के साथ संपर्क करना चाहते हैं पिंग का प्रयास करें। प्रतिक्रिया है कि आपके कनेक्शन का प्रयास रिटर्न वही होगा जो cURL देखता है जब वह कनेक्ट करने की कोशिश करता है (लेकिन जो इसे अनजाने में आपसे जोड़ता है)। अब, आप यहाँ क्या देखते हैं उसके आधार पर, आप कई निष्कर्ष निकाल सकते हैं:

आप एक ऐसी वेबसाइट से जुड़ने का प्रयास कर रहे हैं जो नाम-आधारित आभासी होस्ट है, जिसका अर्थ है कि इसे आईपी पते के माध्यम से नहीं पहुँचा जा सकता है। होस्टनाम के साथ कुछ गलत हो गया है - आपने कुछ गलत किया हो सकता है। ध्यान दें कि मापदंडों के लिए POST के बजाय GET का उपयोग करने से आपको अधिक ठोस जवाब मिलेगा।

समस्या 100-जारी हैडर से भी जुड़ी हो सकती है। दौड़ने की कोशिश करें curl_getinfo($ch, CURLINFO_HTTP_CODE), और परिणाम की जांच करें।


दिलचस्प बिंदु। मैं वास्तव में प्रतिक्रिया के रूप में HTML प्राप्त करने में सक्षम था telnet hostnameऔरGET <url>
Nino Aprkopac

0

मेरा मामला एसएसएल प्रमाणपत्र समाप्ति के कारण था


-1

मेरे मामले में मैं uwsgi का उपयोग कर रहा था, संपत्ति http-मध्यांतर को 60 सेकंड के लिए जोड़ा, लेकिन यह कुछ अतिरिक्त स्थान के कारण काम नहीं कर रहा था और कॉन्फ़िगर फ़ाइल ठीक से लोड नहीं हो रही थी।


-2

यह तब होता है जब आप Https जैसी सुरक्षित वेबसाइट तक पहुंचने का प्रयास कर रहे हैं।

मुझे आशा है कि आप चूक गए

URL को कर्ल करने के लिए -sS -u "यूज़रनेम: पासवर्ड" https://www.example.com/backup.php बदलने का प्रयास करें


3
बहुत ज्यादा नहीं। और btw क्या सरल सामान्य "उपयोगकर्ता नाम: पासवर्ड" https के साथ क्या करना है?
नीनो acकोपैक

उत्तर का मुख्य भाग ऐसा लगता है कि आपको पता नहीं है कि उत्तर में इसे जोड़ना अजीब क्यों है।
स्किड कड़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.