Curl PHP Get Request
20. Januar 2010 | In: Php
Möchte man mit curl z.B. Dateien mit dem Content-Type: text/html runter laden, kann sich aber wegen einer fehlenden Endung (html, css, …) nicht an dieser orientieren, so springt die folgende Funktion in die Bresche.
/** * @param string url - Url * @param array content_types - Liste der erlaubten Content-Typen * @param string file - (optional) Datei um die empfangenen Daten zu speichern * * @return mixed true | false | Daten */ function curlGetByContentType($url, $content_types = array('text/html'), $file = null) { // curl mit Url initialisieren $ch = curl_init($url); // optionen setzen: nur header zurückliefern curl_setopt_array($ch, array( CURLOPT_HEADER => true, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true )); curl_exec($ch); // prüfe ob der Content-Type einer der geforderten ist if(eregi('^('. implode('|', $content_types). ')', curl_getinfo($ch, CURLINFO_CONTENT_TYPE))) { // curl Handle schliessen curl_close($ch); // curl mit Url initialisieren $ch = curl_init($url); // optionen: Body-Cotnent zurückliefern curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // wenn eine Datei angeg. wurde, Daten in Datei speichern if(!is_null($file) && $fh = fopen($file, 'w')) { curl_setopt($ch, CURLOPT_FILE, $fh); } $data = curl_exec($ch); } // curl Hadle schliessen curl_close($ch); // Datei Handle schliessen if(isset($fh) && $fh) { fclose($fh); } return isset($data) ? $data : false; } |
Beispiele
# Content-Type: text/html $url = 'http://www.golem.de'; echo curlGetByContentType($url, array('image/png', , 'text/html')); # Content-Type: text/html; charset="UTF-8" $url = 'http://www.heise.de'; echo curlGetByContentType($url, array('image/png', , 'text/html')); # Content-Type: image/png $url = 'http://upload.wikimedia.org/wikipedia/de/b/bc/Wiki.png'; echo curlGetByContentType($url, array('image/png', , 'text/html'), 'file.png'); |
Leider habe ich keinen Weg gefunden, ohne das curl zwei mal initialisiert werden muss. Vorschläge sind willkommen.

Schreib einen Kommentar
Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.