Lars: CURL: nur bestimmte Dateitypen "curlen"

Hallo Zusammen,

ich habe ein kleines Problem mit Curl. Ich habe mir eine Funktion geschrieben, die eine URL annimmt und diese dann parsen soll, unter anderem um den Seitentitel auszulesen.

Jetzt kann es aber passieren, dass die URLs auf PDFs, GIFs, DOCs usw. zeigen. Wie kann ich sicherstellen, dass nur der Typ text/html geparst wird? Mache ich das am besten in 2 Schritten? Also erst über CURL den Seitentyp herausfinden, dann ggf. noch eine CURL-Anfrage stellen um den Inhalt zu holen, sonst aus der Funktion herausspringen? Oder kann ich das gleich mit einer CURL-Option festlegen, wie nicht text/html-Urls behandelt werden?

Dank und Grüße,
Lars

  1. Hallo,

    verzeih mir bitte mein Sezieren:

    ich habe ein kleines Problem mit Curl.

    Dann nimm sie nicht! PHP hat genug eigene Mittel parat.

    Ich habe mir eine Funktion geschrieben, die eine URL annimmt und diese dann parsen soll, unter anderem um den Seitentitel auszulesen.

    Warum verarbeitet die Funktion nicht die Responsheader dahingehend, daß auf den angelieferten Content-Type Rücksicht genommen wird (vgl. curl_getinfo())? Damit ist war nicht ausgeschlossen, daß der Server falsch konfiguriert wurde, aber die Wahrscheinlichkeit unnötig in einem Bild nach einem <title>-Tag zu fahnden, ist um über 98% gesunken.

    Jetzt kann es aber passieren, dass die URLs auf PDFs, GIFs, DOCs usw. zeigen. Wie kann ich sicherstellen, dass nur der Typ text/html geparst wird?

    Sicherstellen kannst Du es nicht. Admins und Programmierer machen Fehler. Es kommt nur darauf an, wie Du für solche Vorfälle gewappnet bist.

    Mache ich das am besten in 2 Schritten?

    Mache es in drei Schritten:

    - jage den Funktionsparameter "URL-String" durch pathinfo(),
       achte dabei auf die Dateinamenserweiterung
     - fordere die Resource an und analysiere den Header "Content-Type"
     - sind weder Header, noch Dateinamenserweiterung vorhanden, lies die
       ersten zwei Zeichen der Datei, die nicht White-Space sind, ein und
       gleiche sie gegen "<(!|D|d|H|h|?)" ab

    Also erst über CURL den Seitentyp herausfinden, dann ggf. noch eine CURL-Anfrage stellen um den Inhalt zu holen, sonst aus der Funktion herausspringen?

    Das kann alles in einem Arbeitsschritt beweltigt werden. Warum also soll hier unnötig Traffic fabriziert werden? Wenn Header "Content-Type" nicht "text/(ht|x)ml|application/xml(+xhtml)?" ist, jedoch angegeben wurde - Pech für die Kuh Elser (Schließen der Verbindung).

    Oder kann ich das gleich mit einer CURL-Option festlegen, wie nicht text/html-Urls behandelt werden?

    Wage Bitte einen Blick über den Tellerrand! Dein Script kommt ausschließlich mit cURL zurande. Diese Erweiterung gehört nicht zu den gängigsten. Fehlt Dir diese Erweiterung auf einem anderen Rechner, bist Du erstmal am Basteln. Warum also nicht gleich mit Streams oder Netzwerkfunktionen arbeiten?

    Gruß aus Berlin!
    eddi