जब कर्ल को * खाली प्रतिक्रिया * मिलती है तो कनेक्टिविटी का समस्या निवारण कैसे करें


27

मैं यह जानना चाहता हूं कि समस्या निवारण में कैसे आगे बढ़ना है क्यों एक वेबसर्वर के लिए एक कर्ल अनुरोध काम नहीं करता है। मैं मदद की तलाश नहीं कर रहा हूं जो मेरे पर्यावरण पर निर्भर करेगा, मैं बस यह जानना चाहता हूं कि संचार के किस हिस्से के बारे में जानकारी एकत्र करना विफल है, पोर्ट नंबर, आदि।

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

तो, मैं समझता हूं कि खाली प्रतिक्रिया का मतलब है कि कर्ल को सर्वर से कोई प्रतिक्रिया नहीं मिली। कोई बात नहीं, यह ठीक है कि मैं क्या पता लगाने की कोशिश कर रहा हूँ।

लेकिन क्या अधिक विशिष्ट जानकारी मैं यहाँ cURL से प्राप्त कर सकता हूं?

यह सफलतापूर्वक "कनेक्ट" करने में सक्षम था, इसलिए इसमें कुछ द्विदिश संचार शामिल नहीं है? यदि ऐसा है, तो प्रतिक्रिया भी क्यों नहीं आती है? ध्यान दें, मैंने सत्यापित किया है कि मेरी सेवा जारी है और प्रतिक्रियाएँ लौट रही हैं।

ध्यान दें, मैं नेटवर्किंग के इस स्तर पर थोड़ा हरा हूं, इसलिए कुछ सामान्य अभिविन्यास सामग्री प्रदान करने के लिए स्वतंत्र महसूस करता हूं।


1
मुझे वही त्रुटि मिल रही थी, लेकिन मेरे मामले में यह वीपीएन सॉफ़्टवेयर था जो कुछ नेटवर्क ट्रैफ़िक को रोक रहा था और अवरुद्ध कर रहा था। यहां देखें और अधिक: stackoverflow.com/a/24189367/703200
क्रिस बार्टले

जवाबों:


16

आपको संभवतः क्लाइंट की ओर से, सर्वर साइड से इसका निवारण करने की आवश्यकता होगी। मेरा मानना ​​है कि आप 'कोई प्रतिक्रिया नहीं' के साथ 'खाली प्रतिक्रिया' को भ्रमित कर रहे हैं। उनका मतलब एक ही चीज से नहीं है। संभवतः आपको ऐसा उत्तर मिल रहा है जिसमें कोई डेटा नहीं है।

आप कर्ल के माध्यम से जाने के बजाय टेलनेट का उपयोग करके इसका परीक्षण कर सकते हैं:

telnet 111.222.159.30 80

एक बार कनेक्ट होने के बाद, निम्नलिखित पेस्ट करें (अपने कर्ल आउटपुट से लिया गया):

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: */*

आपको प्रतिक्रिया को ठीक वैसे ही देखना चाहिए जैसे कर्ल इसे देखता है।

खाली उत्तर मिलने का एक संभावित कारण यह है कि आप एक वेबसाइट को हिट करने की कोशिश कर रहे हैं जो एक नाम-आधारित वर्चुअल होस्ट है। यदि ऐसा है, तो सर्वर कॉन्फ़िगरेशन (आप जिस साइट को हिट करने की कोशिश कर रहे हैं, वह डिफ़ॉल्ट के रूप में कॉन्फ़िगर किया जाना है) पर निर्भर करता है, आप बिना किसी काम के आईपी पते से साइट तक नहीं पहुंच सकते।

आप ऊपर दिए गए 'होस्ट' लाइन को बदलकर ग्राहक की तरफ देख सकते हैं; उस साइट के साथ www.example.com बदलें जो आप पहुँचने का प्रयास कर रहे हैं:

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: www.example.com
Accept: */*

मैं पेज को किसी अन्य क्लाइंट से सफलतापूर्वक प्राप्त करने में सक्षम हूं। यह कुछ नेटवर्क के लिए विशिष्ट है, जो क्लाइंट के लिए हो सकता है, मुझे लगता है।
चाड

और, खाली प्रतिक्रिया के लिए = कोई प्रतिक्रिया नहीं के रूप में, मुझे यह मिला कि stackoverflow.com/questions/5929971/… से , लेकिन मैं एक दूसरी राय पर विचार करने के लिए तैयार हूं;)
chad

1
आपको अभी भी इसे सर्वर की ओर से समस्या निवारण की आवश्यकता होगी। यदि सर्वर डेटा नहीं भेज रहा है, तो क्लाइंट को पता नहीं चलेगा कि क्यों। यह केवल यह जानता है कि यह नहीं मिला। खाली बनाम नहीं के रूप में, मुझे एक सर्वर मिला जिसमें कर्ल ने 'खाली' प्रतिक्रिया के बारे में शिकायत की और मुझे निश्चित रूप से प्रतिक्रिया मिली। * Empty reply from serverकर्ल से, सीधे जुड़ने से शरीर से संबंधित सभी प्रासंगिक हेडर को शुद्ध रूप से दिखाया गया है <!-- b5 -->। यदि यह कर्ल के साथ कहीं और काम करता है और एक विशिष्ट नेटवर्क पर नहीं, तो मैं उस नेटवर्क के अंतरों को देखूंगा। एक खराब व्यवहार शायद प्रॉक्सी?
यूनिक्स

7

कर्ल ठीक है, लेकिन चीजें गलत होने पर बहुत प्रतिक्रिया नहीं देते हैं। (जैसा कि आप बता सकते हैं) wget आपको अधिक जानकारी दे सकता है, लेकिन yoonix उल्लेखों के अनुसार, सर्वर साइड (यानी वेबसर्वर त्रुटि लॉग) देखने की जगह है।

wget -S -O /dev/null http://www.example.com

आप होस्टनाम के साथ भी सेट कर सकते हैं

wget -s -O /dev/null --header="Host: foo.bar" http://www.example.com

2

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

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

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


1
नोट (जब से मैंने देखा कि आपने एक ही उत्तर को एक अलग cURL प्रश्न में पोस्ट किया है): ये प्रश्न cURL, CLI बाइनरी के बारे में हैं, न कि आपके द्वारा संदर्भित PHP आवरण कार्यान्वयन। दूसरे शब्दों में, getinfoCLI cURL के लिए ध्वज या सुविधा जैसी कोई चीज नहीं है । @ वह कर्ल.हैक्स.से
केन

0

विंडोज के डब्लूएसएल के तहत कुछ अवसरों में। बैश के अंदर कर्ल चलाना समान त्रुटि उत्पन्न करेगा और ऐसा इसलिए है क्योंकि कैस्परक्सी इसे HTTP / s से कनेक्ट करने से रोक रहा है।

यह बग यहां बताया गया है

एक त्वरित समाधान है कि आप जिस सर्वर तक पहुँचने की कोशिश कर रहे हैं उस पर कास्परस्की की सुरक्षा को निष्क्रिय कर दें (tcp 80 for exmaple)।

यह कैस्परस्की - सेटिंग्स - नेटवर्क सेटिंग्स - "मॉनिटर सिलेक्टेड पोर्ट्स ओनली" पर जाकर किया जाता है - पोर्ट चुनें - पोर्ट पर डबल क्लिक्क (80) और निष्क्रिय चुनें

यहाँ छवि विवरण दर्ज करें

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