naden.de Bookmarken

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.

Bewertung: najagut
Loading ... Loading ...

Ähnliche Beiträge

Schreib einen Kommentar

Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.
Sign in with Facebook

By Teledir Internetanbieter