Marko: HTTP Statuscodes abfragen

Hi Forum,

ich habe eine Liste mit URLS in einer Datenbank, und möchte die checken. Also Request an den Server und HTTP Statuscode checken, ich finde aber einfach keine PHP funktion dafür, O.K. ich könnte das File öffnen, aber dann bekomme ich immer noch keinen Statuscode.
Muss ich mich da jetzt wirklich auf die Socketebene begeben und die Requests in HTTP coden, oder gibt es da Unterstützung ?

Gruss

Marko

  1. Hi Forum,

    Hi Marko,

    das gleiche Problem hatte ich auch letztens. Ist aber alles halb so wild. Dazu hier ein Codeschnipsel. Ist selbsterklärend, oder?

    Gruß Henk

    if ($fp = fsockopen ($server, 80, $errno, $errstr, 30))
    {
     $query =  "GET ".$url." HTTP/1.0\r\n\r\n";

    fputs ($fp,$query);
     $response =  trim(fgets($fp,128));

    $http_status = preg_replace("/HTTP/1.. /","",$response);
     $http_status = preg_replace("/ .*/","",$http_status);
    }

    1. Hallo Henk,

      danke erstmal, also geht es wohl wirklich nur so. Na werde Deinen Code als Grundlage nehmen, aber etwas komplizierter wird es noch, hab nämlich gemerkt, dass die ganzen Shared Server nur HTTP 1.1 verstehen, und den Hostnamen mitgeliefert bekommen wollen.

      Gruss

      Marko

      1. Moin!

        danke erstmal, also geht es wohl wirklich nur so. Na werde Deinen Code als Grundlage nehmen, aber etwas komplizierter wird es noch, hab nämlich gemerkt, dass die ganzen Shared Server nur HTTP 1.1 verstehen, und den Hostnamen mitgeliefert bekommen wollen.

        Zwei Anmerkungen:

        1. Verwende "HEAD" statt "GET" - dann kriegst du nicht die ganze echte Seite geliefert, sondern nur den HTTP-Header ohne Seite.

        2. Statt einfach nur ein GET (bzw. besser HEAD) zu senden, solltest du einfach noch eine Zeile dranhängen und die Angabe "Host: www.server.tld" mitsenden. Das funktioniert auch mit HTTP/1.0 - ziemlich viele alte Browser (unter anderem unser geliebter Netscape 4) machen das so - es sollte also funktionieren. Im eigentlichen HEAD steht dann nur noch der Pfad auf dem Server, nicht die komplette URL (statt "http://www.server.tld/pfad/seite.html" nur noch "/pfad/seite.html").

        - Sven Rautenberg

        --
        "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)