curl_exec () हमेशा झूठा लौटता है


113

मैंने कोड का यह सरल टुकड़ा लिखा है:

$ch = curl_init();

//Set options
curl_setopt($ch, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$website_content = curl_exec ($ch);

मेरे मामले में $website_contentआता है false। किसी को क्या गलत हो सकता है कुछ सुझाव / सलाह दे सकते हैं?


8
curl_error()त्रुटि विवरण के लिए परामर्श करें और इन्हें यहाँ पोस्ट करें, कृपया।
लिनस क्लेन

@LinusKleen यदि आप उत्तर के रूप में कर्ल_रोर () पोस्ट करते हैं तो मैं इसे बढ़ा दूंगा क्योंकि इससे मुझे यह देखने की अनुमति मिली कि मेरी समस्या क्या थी।
जाइल्स रॉबर्ट्स

वास्तव में समस्या क्या थी? क्या त्रुटि हुई curl_error()?
शोदेव

जवाबों:


241

त्रुटि जाँचना और संभालना प्रोग्रामर का मित्र है। CURL फ़ंक्शंस को निष्पादित और निष्पादित करने के रिटर्न मूल्यों की जाँच करें। curl_error()और curl_errno()विफलता के मामले में आगे की जानकारी होगी:

try {
    $ch = curl_init();

    // Check if initialization had gone wrong*    
    if ($ch === false) {
        throw new Exception('failed to initialize');
    }

    curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(/* ... */);

    $content = curl_exec($ch);

    // Check the return value of curl_exec(), too
    if ($content === false) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }

    /* Process $content here */

    // Close curl handle
    curl_close($ch);
} catch(Exception $e) {

    trigger_error(sprintf(
        'Curl failed with error #%d: %s',
        $e->getCode(), $e->getMessage()),
        E_USER_ERROR);

}

* curl_init() मैनुअल कहता है:

सफलता पर एक CURL संभालता है, त्रुटियों पर FALSE

FALSEजब आप इसके $urlपैरामीटर का उपयोग कर रहे हैं और डोमेन को हल नहीं किया जा सकता है, तो मैंने फ़ंक्शन को देखा है । यदि पैरामीटर अप्रयुक्त है, तो फ़ंक्शन कभी वापस नहीं आ सकता हैFALSE । हमेशा इसे वैसे भी जांचें, हालांकि, मैनुअल स्पष्ट रूप से यह नहीं बताता है कि वास्तव में "त्रुटियां" क्या हैं।


9
+1: curl_execFALSE वापसी पर PHP में कर्ल के लिए सरल और सीधे परेशानी की शूटिंग । - PHP उदाहरण में कर्ल वर्बोज़ मोड
hakre

हाँ। वास्तव में यह लंबे समय से पहले लगा था। हालांकि उत्तर के लिए धन्यवाद :)
आदित्य

7
कोई दिक्कत नहीं है। इसके लिए एक रिवाइवल बैज मिला है: स्वीकार करने के लिए धन्यवाद।
लाइनस क्लेन

@marverix अच्छी तरह से, उसका नाम लिनुस है: पी
निनो Julopopac

और कर्ल_क्लोज़ ($ ch) मत भूलना;
रफीक बारी

10

मेरे मामले में मुझे इस तरह सेट VERIFYHOSTऔर VERIFYPEERटू करना falseहोगा:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

कॉल करने से पहले curl_exec($ch)

क्योंकि मैं स्व-नियत प्रमाणपत्रों के साथ दो विकास परिवेशों के बीच काम कर रहा हूं। वैध प्रमाण पत्र के साथ सेट करने के लिए कोई जरूरत नहीं है VERIFYHOSTऔर VERIFYPEERकरने के लिए falseक्योंकि curl_exec($ch)विधि काम करते हैं और प्रतिक्रिया आप उम्मीद कर वापस आ जाएगी।


यह वास्तव में मेरे लिए उपयोगी था। पारितोषिक के लिए धन्यवाद!
n8jadams

3

यह मेरे साथ कल हुआ था और मेरे मामले में इसलिए था क्योंकि मैं एक एपीआई के साथ संवाद करने के लिए कुछ मॉड्यूल विकसित करने के लिए एक पीडीएफ मैनुअल का पालन कर रहा था और मैनुअल से सीधे लिंक की नकल करते हुए, किसी विषम कारण के लिए, hyphenकॉपी किए गए लिंक से अलग था एन्कोडिंग और इसलिए curl_exec()हमेशा वापस लौट falseरहा था क्योंकि यह सर्वर के साथ संवाद करने में असमर्थ था।

अंत में वर्णों में भिन्नता को समझने में मुझे कुछ घंटे लगे:

https://www.e‐example.com/api
https://www.e-example.com/api

हर बार जब मैंने लिंक को सीधे ब्राउज़र से एक्सेस करने का प्रयास किया तो यह कुछ इस तरह परिवर्तित हो गया https://www.xn--eexample-0m3d.com/api

यह आपको प्रतीत हो सकता है कि वे समान हैं, लेकिन यदि आप hyphens यहां के एन्कोडिंग की जांच करते हैं तो आप देखेंगे कि पहला hyphenयूनिकोड वर्ण U + 2010 है और दूसरा U + 002D है

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

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