Wenn Sie eine Verbindung mit dem Server herstellen, können Sie einen Rückkehrcode von diesem erhalten. Andernfalls schlägt dieser fehl und Sie erhalten eine 0. Wenn Sie also versuchen, eine Verbindung zu "www.google.com/lksdfk" herzustellen, erhalten Sie einen Rückkehrcode von 400, wenn Sie direkt zu google.com gehen, erhalten Sie 302 (und dann 200, wenn Sie zur nächsten Seite weiterleiten ... nun ja, weil es an google.com.br weiterleitet, sodass Sie das möglicherweise nicht erhalten). und wenn Sie zu "googlecom" gehen, erhalten Sie eine 0 (Host nicht gefunden). Bei der letzten gibt es also niemanden, der einen Code zurücksendet.
Getestet mit dem folgenden Code.
<?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);
Versuchen Sie dies nach curl_exec, um zu sehen, wo das Problem liegt:
Wenn es sich um etwas wie "fehlerhaft" handelt, überprüfen Sie Ihr URL-Format.
quelle
Überprüfen Sie den curl_error nach dem curl_getinfo, um die versteckten Fehler herauszufinden.
quelle
Wie hier und unten erwähnt, gibt eine fehlgeschlagene Anforderung ( dh der Server wird nicht gefunden ) false zurück, keinen HTTP-Statuscode, da nie eine Antwort empfangen wurde.
Rufen Sie an
curl_error()
.quelle
Ich hatte das gleiche Problem und in meinem Fall lag dies daran, dass die Funktion curl_exec in der php.ini deaktiviert ist. Auf Protokolle prüfen:
Die Lösung besteht darin, curl_exec aus den deaktivierten Funktionen in der php.ini in der Serverkonfigurationsdatei zu entfernen.
quelle
Was ist der genaue Inhalt, den Sie an $ html_brand übergeben?
Wenn es eine ungültige URL-Syntax hat, erhalten Sie sehr wahrscheinlich den HTTP-Code 0.
quelle
Versuche dies:
quelle
Ein weiterer Grund für PHP, http-Code 0 zurückzugeben, ist das Timeout. In meinem Fall hatte ich die folgende Konfiguration:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Es stellte sich heraus, dass die Anforderung an den Endpunkt, auf den ich zeigte, immer mehr als 500 ms dauerte, immer eine Zeitüberschreitung aufwies und immer den http-Code 0 zurückgab.
Wenn Sie diese Einstellung entfernen (CURLOPT_TIMEOUT_MS) oder einen höheren Wert eingeben (in meinem Fall 5000), erhalten Sie den tatsächlichen http-Code, in meinem Fall 200 (wie erwartet).
Siehe https://www.php.net/manual/en/function.curl-setopt.php
quelle