PHP cURL – Eine kurze Einführung
cURL ist eines der wichtigens Tools für Entwickler. Durch den Einsatz von cURL ist es möglich Daten aus unterschiedlichen Quellen abzufragen. Die unterschiedlichen Möglichkeiten dabei sind nahezu unzählbar. Das klassische Einstiegsbeispiel ist dabei die Abfrage von Daten aus einer Schnittstellen. Um jedoch Daten per cURL abfragen zu können müssen zunächst einzelne Schritte beachtet und durchlaufen
Aufbau eines cURL Requests
Der Aufbau eines cURL Requests setzt sich dabei zunächst auf 5 Schritten zusammen.
- cURL-Session initialisieren
- Option(en) für einen cURL Transfer setzen
- cURL-Session ausführen
- cURL-Session schließen
- Ausgabe / Verwendung der Ergebnisse
<?php //step1 $curl_session = curl_init(); //step2 curl_setopt($curl_session ,CURLOPT_URL,"http://www.example.com"); //step3 $result = curl_exec($curl_session ); //step4 curl_close($curl_session ); //step5 echo $result; ?>
In diesem Beispiel wird eine einfache Session mit curl_init gestartet. Anschließend wird über curl_setopt die Option CURLOPT_URL gesetzt und dabei die gewünschte Ziel URL angegeben. Anschließend wird die Session mit curl_exec ausgeführt und mit curl_close geschlossen. Das Ergebnis wird dabei in der Variable $result gespeichert und kann anschließend ausgegeben werden. Dieser einfache Aufbau ruft dabei die angegeben URL auf und gibt die dabei erhaltenen Inhalte, in diesem Fall die Webseite www.example.com, aus. Der dabei vermutlich wichtigste und interessante Teil ist curl_setopt. Hierbei gibt es sehr viele aber vor allem auch sehr unterschiedliche Möglichkeiten den Request anzupassen. Eine Liste der unterschiedlichen Optionen gibt es in der PHP cURL Dokumentation Um nun aber nicht nur eine einzelne Webseite abfragen und ausgeben zu können wollen wir nun den Request anpassen. Der Ablauf (5 Schritte) bleibt dabei der gleiche. Interessant wird dies vor allem dann, wenn die Abgefragte URL nicht nur eine einfache Webseite sondern eine tatsächliche Schnittstelle ist.
Abfrage von Daten einer Schnittstelle mit GET Parametern
<?php $fields = http_build_query(array( "count" => "1", "gender" => "m", "minAge" => "18", "maxAge" => "23", "format" => "json" )); $curl_session = curl_init(); curl_setopt($curl_session ,CURLOPT_URL, "https://randomname.de/?" . $fields); curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($curl_session ); curl_close($curl_session ); echo $result; ?>
In diesem Beispiel fragen wir bei einer Schnittstelle gezielt nach einer imaginären, zufällig generierten Person. Dabei wollen wir aber auch einige der Merkmale genauer definieren. Diese Merkmale übergeben wir der Schnittstelle in Form von GET Parametern welche mir an die URL anhängen. In diesem Falle wollen wir eine männliche Person im Alter zwischen 18 und 23 im Format JSON generieren und als Antwort erhalten. Zusätzlich setzten wir CURLOPT_RETURNTRANSFER auf TRUE um das Ergebnis in einer Variable abzuspeichern und anschließend ausgeben zu können.
Abfrage von Daten mit Authentifizierungen per POST
In den bisherigen Beispielen haben wir Requests an Schnittstellen betrachtet bei denen die GET Methode zum Einsatz kommt. Nun wollen wir aber Parameter im Hintergrund an eine Schnittstelle schicken. Unterschied GET und POST Dafür nutzen wir wieder einen ähnlichen Aufbau für unseren Request wie bisher. Passen allerdings dazu nochmals unsere Optionen an. In diesem Fall schauen wir uns den Aufbau an einem Imaginären Request an.
<?php $fields = http_build_query(array( "id" => "007", )); $curl_session = curl_init(); curl_setopt($curl_session ,CURLOPT_URL, "https://www.someurl.de/request/getuser/byid/"); curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl_session, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl_session, CURLOPT_POSTFIELDS, $fields); curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Authorization: OAuth SomeOAuthaccess') ); $result = curl_exec($curl_session ); curl_close($curl_session ); print_r($result); ?>
Zunächst fällt auf, dass wir deutlich mehr Optionen gesetzt haben als zuvor. Dies liegt unter anderem daran, dass wir nun nicht mehr per GET sondern per POST unsere Daten an die Schnittstelle senden möchten, zusätzlich wird auch noch ein Content-Type (application/json), sowie eine Authorization (OAuth SomeOAuthaccess) mitgesendet. Welche Optionen dabei genau gesetzt werden und warum aber auch in was für einem realen Beispiel ein solches Requests Verwendung finden könnte wollen wir uns nun genauer anschauen.
Ablauf des Requests
Zunächst wird ein einzelner Parameter definiert, in diesem Beispiel soll dieser eine User ID darstellen. Direkt im Anschluss wird nun, wie bisher, die URL definiert. In diesem Falle handelt es sich um eine fiktive URL die das Beispiel unterstützen soll. Die URL lautet https://www.someurl.de/request/getuser/userid/. Anhand der Bezeichnung der einzelnen Teile der URL lässt sich schon darauf schließen was dieser Service anbieten könnte. Die URL soll dabei beispielsweise eine REST Api darstellen an welcher die Daten eines Users anhand der userid abgefragt werden können. Anschließend definieren wir wieder CURLOPT_RETURNTRANSFER um das Ergebnis abspeichern zu können ohne das dieses direkt ausgegeben wird. Nun definiteren wir mit CURLOPT_CUSTOMREQUEST die Art des Requests, welche in diesem Falle POST und nicht mehr GET sein soll. Anschließend übergeben wir unsere Parameter die dabei übertragen werden sollen und setzten anschließend das Format. Neu ist dabei nun die Authorization hierbei soll im Beispiel verdeutlicht werden wie eine Authentifizierung mit angehängt werden kann. In diesem Falle eine Authentifizierung mit OAuth und einem Key SomeOAuthaccess. Neben OAuth gibt es weitere Authentifizierungen wie Basic oder Token. Anschließend führen wir den Requests aus, speichern das Ergebnis in einer Variablen, schließend die Session und geben das Ergebnis aus. In diesem Falle könnten dies nun die Daten eines Users in einem Format wie JSON oder XML sein. Mehr Informationen zu den Möglichkeiten der einzelnen Optionen gibt es in der curl_setopt Dokumentation
Weitere interessante und lustige Schnittstellen
Viele Webseiten bieten ganz unterschiedliche Schnittstellen an. Manche davon sind sehr nützlich wie z.B. eine Abfrage die Werte Longitude und Latitude einer Stadt anzufragen. http://www.zippopotam.us/ http://api.zippopotam.us/de/78467 Manche davon bieten eher lustige Funktionen an wie z.B. ein zufälliges Kanye West Zitat https://kanye.rest/ https://api.kanye.rest/ Eine Ganze Liste von Schnittstellen gibt es auf GitHub https://github.com/toddmotto/public-apis vom User toddmotto
Weitere Interessante Links zum Thema:
PHP.net Manuel cURL Video: PHP cURL Tutorial and Example Video: How to post data using curl in php Weitere Artikel des Autors
Das könnte Dich auch interessieren
Laravels MVC-Ansatz erklärt anhand einer kleinen Anwendung Teil 1
Laravel gehört zu der Gruppe der PHP-Frameworks die den MVC-Ansatz verfolgt. Aber was heißt eigentlich MVC und wie ist das in Laravel verbaut? Um eine Antw...
Stressmanagement: der richtige Umgang mit Stress
Jeder kennt das Gefühl von Stress. Man ist bereits mit seinen täglichen Aufgaben ausgelastet und trotzdem kommen immer neue Aufgaben dazu. Oft fragt man sich,...
Die Suche nach dem passenden Editor
In meinem bisherigen Studium habe ich mich schon öfters auf die Suche nach einem Editor für die Webentwicklung gemacht. In diesem Blogbeitrag möchte ich Euch...