PHP cURL HTTP CODE वापसी 0


95

मुझे समझ में नहीं आता है जब मैं $ httpCode मैं हमेशा प्रतिध्वनि करता हूं, मुझे 404 की उम्मीद थी जब मैं $ html_brand को एक टूटे हुए url में बदलता हूं। क्या ऐसा कुछ है जो मुझे याद है या नहीं पता है? धन्यवाद।

 //check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 404) {
    echo "The Web Page Cannot Be Found";
    return;
}
curl_close($ch);

जवाबों:


95

यदि आप सर्वर से जुड़ते हैं, तो आप इससे एक रिटर्न कोड प्राप्त कर सकते हैं, अन्यथा यह विफल हो जाएगा और आपको 0. मिल जाएगा। यदि आप "www.google.com/lksdfk" से जुड़ने का प्रयास करते हैं, तो आपको एक रिटर्न कोड मिलेगा 400, अगर आप सीधे google.com पर जाते हैं, तो आपको 302 मिलेंगे (और फिर 200 अगर आप अगले पेज पर फॉरवर्ड करते हैं ... तो ठीक है, क्योंकि मैं इसे google.com.br के लिए फॉरवर्ड करता हूं, इसलिए आपको वह नहीं मिल सकता है), और यदि आप "googlecom" पर जाते हैं, तो आपको 0 मिलेगा (होस्ट नहीं मिला), इसलिए पिछले एक के साथ, कोड वापस भेजने के लिए कोई नहीं है।

नीचे दिए गए कोड का उपयोग करके परीक्षण किया गया।

<?php

$html_brand = "www.google.com";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);

1
इसके अलावा अनुवर्ती स्थानांतरण के लिए भी thx, कभी कभी मैं 301 जो एक पुनर्निर्देशन मुद्दा है मिलता है।
Ardeus

भले ही $ प्रतिक्रिया में इसकी अजीब सामग्री HTML सामग्री हो, लेकिन $ httpcode हमेशा 0 लौटाता है, साथ ही कर्ल_रोर शून्य है। क्या संभव हो सका। मैं केवल रिटर्नट्रेन्सर, हेडर (गलत), केवल सेटिंग में अनुसरण शामिल करता हूं।
एरडियस

बस जोड़ने के लिए, यदि URL से पहले या बाद में कोई व्हाट्सएप है, तो वह http_code = 0 भी फेंक देगा
राजा आमेर खान


80

यह देखने के लिए कि क्या समस्या है curl_exec के बाद यह आज़माएँ:

print curl_error($ch);

यदि यह 'विकृत' जैसी कोई चीज़ प्रिंट करता है, तो अपने URL प्रारूप की जाँच करें।


5
उस सुझाव के लिए धन्यवाद - मेरे बट को बचाया :)
wbj

हाँ! मेरी गांड को बचा लिया।
pimbrouwers


2

जैसा कि यहां और नीचे कहा गया है, एक असफल अनुरोध ( अर्थात सर्वर नहीं मिला है ) गलत, कोई HTTP स्थिति कोड नहीं देता, क्योंकि उत्तर कभी प्राप्त नहीं हुआ।

पुकारते हैं curl_error()


2

मेरे पास एक ही समस्या थी और मेरे मामले में ऐसा इसलिए था क्योंकि phl.ini में curl_exec फ़ंक्शन अक्षम है। लॉग की जाँच करें:

PHP Warning:  curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18

समाधान सर्वर कॉन्फ़िगरेशन फ़ाइल पर php.ini में अक्षम कार्यों से curl_exec को हटा देता है।


1

आप $ html_brand में जो सटीक सामग्री पास कर रहे हैं, वह क्या है?

यदि इसमें एक अमान्य URL सिंटैक्स है, तो आपको HTTP कोड 0 प्राप्त होने की संभावना है।


1

इसे इस्तेमाल करे:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

2
जब किसी पुराने प्रश्न का उत्तर स्वीकृत उत्तर के साथ दिया जाता है, तो यह बताना महत्वपूर्ण होता है कि आपके उत्तर के प्रश्न का नया पहलू क्या है। साथ ही कोड केवल जवाब देते हैं कि वे कैसे और क्यों काम करते हैं, कुछ स्पष्टीकरण जोड़कर आम तौर पर सुधार किया जा सकता है। यह सुझाव देते समय कि कोई व्यक्ति सुरक्षा को अक्षम करता है, यह बताना बहुत महत्वपूर्ण है कि जोखिम क्यों और क्या हैं।
जेसन एलर

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
डोनाल्ड डक

0

PHP के HTTP कोड 0 को वापस करने का दूसरा कारण टाइमआउट है। मेरे मामले में, मेरे पास निम्नलिखित कॉन्फ़िगरेशन था:

curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);

यह पता चला कि एंडपॉइंट के लिए अनुरोध मैं हमेशा 500 से अधिक एमएस लेने का इशारा कर रहा था, हमेशा समय निकालकर और हमेशा http कोड 0 लौटाता था।

यदि आप इस सेटिंग को हटाते हैं (CURLOPT_TIMEOUT_MS) या एक उच्च मान (मेरे मामले में 5000) में, आपको वास्तविक http कोड मिलेगा, मेरे मामले में 200 (आशा के अनुसार)।

Https://www.php.net/manual/en/function.curl-setopt.php देखें

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