cURL: Callback-Funktion mit Regulären Ausdrücken für den Header
In meinem vorherigen Post (cURL: Verbindung herstellen) habe ich darüber berichtet wie man mit der in PHP integrierten Bibliothek cURL eine URL aufruft – unter anderem um einen Webservice aufzurufen oder andere Dateien auszulesen. Die Grundlagen haben wir schon mal, um nun weiter zu gehen. In manchen Fällen möchte man die Header auslesen, nicht alle, sondern eventuell nur einen und die bestimmte Inhalte weiterverarbeiten. Dazu bietet sich ganz gut die Konstante CURLOPT_HEADERFUNCTION an. In dieser definiert man einen Funktionsnamen. Diese Callback Funktion wird bei jedem Lesen eines Headers aufgerufen und darauf angewendet werden. Man kann somit zum Beispiel reguläre Ausdrücke anwenden und bestimmte Strings aus den Headers auslesen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // URL, die aufgerufen werden soll $uri = "http://www.curl-weburl-oder-webservice.de/demo"; // Initiallisieren der Verbindung $ch = curl_init(); // Konstanten-Werte setzen curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); // Ausführen einer Verbindung $result= curl_exec($ch); // Verbindung schließen curl_close($ch); ?> |
Somit haben wir für diese Verbindung eine Callback-Funktion angegeben. Nun implementieren wir noch die Funktion, als Beispiel soll der Location-Header ausgelesen werden, sofern dieser angegeben gesetzt ist:
1 2 3 4 5 6 |
function read_header($ch, $string) { if(preg_match("/^Location: (.*)?/", $string, $matches)) { $location = trim($matches[1]); } return strlen($string); } |
Der reguläre Ausdruck /^Location: (.*)?/ matched auf Strings die mit Location: anfangen. Die Returnwert der Callback-Funktion muss gesetzt sein. In unserem Beispiel steht die Konstante CURLOPT_FOLLOWLOCATION auf FALSE. Andernfalls wird dem „Location: „-Header gefolgt.
Noch ein Tipp, wenn die eigene Callback Methode nicht gefunden werden sollte:
1 |
curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'read_header')); |
Falls die Funktionen in einer Klasse (class) definiert werden, dann wird die Konstante mittel array gesetzt.
Die letzten Kommentare