[Class] PHP Http-Client

d4f

Kaffee? Wo?
Was?
HttpClient ist eine PHP-Klasse welche HTTP-Abrufe automatisiert und es somit ermoeglichst in Kombination mit SimpleHtmlDom binnen kuerzester Zeit eine bestehende Webseite zu automatisieren (API-fizieren) oder eine Kommunikation zwischen 2 Webdiensten zu realisieren.

Wie?
Der HttpClient stellt eine von einem ueblichen Webbrowser kaum zu unterscheidende HTTP-Anfrage an den Server und behandelt vollautomatisiert relative URL's, URL-Weiterleitungen (Location Header), HTTP-Status Handler, HTTP-Authentifizierung sowie die Uebermittlung von POST und GET Variablen. Ausserdem werden erhaltene Cookies gespeichert und bei spaeteren Aufrufen der Webseite wieder uebertragen. Redirects von einer Domain auf eine andere sowie Unterstuetzung von SSLv2 und TLS (SSLv3) runden die Klasse ab.
Hinweis: In der Webseite enthaltene Elemente (Bilder, CSS, i/Frames, Objekte, ...) werden NICHT automatisiert abgerufen

Wozu?
Ein moeglicher Einsatzzweck ist die bereits eingangs beschriebene schnelle, kostenguenstige und unkomplizierte API-fizierung bestehender Webseiten zwecks Automatisierung, Aufbau eines Mobile-Portales oder White-labeling.
Beispielweise ist binnen weniger Minuten das Anlegen eines Kunden im Froxlor-Webhostingpanel vollstaendig automatisiert.

Lizenz
Die hier veroeffentlichte Kopie des Skriptes ist unter der MIT 'Expat' Lizenz (FOSS) ohne weitere Gegenleistung, Gebuehren oder Einschraenkung vollstaendig zum privaten und kommerziellen Gebrauch freigegeben.
Natuerlich freue ich mich ueber jedgliche Fixes und Erweiterungen.

Benutzung
Die Klasse besteht aus 6 public Array-Variablen und 4 public Funktionen.
Alle Variablen sind im Quellcode annotiert, somit erklaere ich hier nur kurz die Funktionen

get( [string] $uri )
Laedt die Webseite mittels GET und gibt ein bool zurueck je nach Erfolg

post( [string] $uri , [array] $post)
Laedt die Webseite mittels POST und gibt ein bool zurueck je nach Erfolg.
Das enthaltende POST-Array wird als Formular-Daten dabei an den Server uebergeben.

request( [string] $method, [string] $uri, [array|bool] $data, ([bool] $first) )
$method definiert die HTTP-Methode (zB HEAD, GET, POST)
Laedt die Webseite mittels $method und gibt ein bool zurueck je nach Erfolg.
Wenn $data nicht auf bool=>false ist, wird ein POST-Formular an den Server uebergeben, ohne Ruecksicht auf die HTTP-Methode.
Wenn $first spezifiert ist und auf bool=>false ist, wird die Anfrage als Redirect der letzten Anfrage gehandhabt.

urlToParts($url)
Loest relative URL's in Bezug auf den Schluss-Pfad nach allen Redirects der letzten Anfrage auf (sofern nicht absolut) und gibt ein Array mit folgenden Informationen zurueck:
  • ssl [bool]
    Definiert ob eine Anfrage als SSL oder nicht ablaufen soll (Gibt aber nicht die zu verwendende SSL-Version (2 oder 3) zurueck da es experimentell fest zu stellen ist!
  • domain [String]
    FQDN der Webseite (HTTP Host)
  • path [String]
    Pfad auf der Domain ohne GET-Parameter
  • query [String]
    GET-Parameter



Wo?
Public GIT repository auf GitHUB:
https://github.com/d4fseeker/Misc-classes/tree/httpclient

Bitte...
Ich bin fuer jedgliche Kritik, Hinweise und Code-Contributions dankbar.
 
Hi Daniel,

tolle Klasse - wird sicherlich mal nützlich sein. :)

Eine Anmerkung vom Codedesign z.B. schreibst du:
PHP:
    if (!$href) {
        return $base;
    }

ich fasse sowas immer gern kurz, ist halt jedem sein Stil und man spart sich zumindest bei einer deutschen Tastatur Klammergriffe.

PHP:
   if (!$href) 
        return $base;
 
Die Funktion resolve_href() wurde 1:1 von PHP.net ohne Aenderungen am Quellcode uebernommen. (Link)


Ich habe den Hinweis in der TODO-Liste als 'an Codingstil anpassen' aufgenommen.

Hmm ich hab eine US-Tastatur genau aus dem Grund in mein Schleppi einbauen lassen - allerdings muss ich dafuer die Sonderzeichen umschreiben, zumals die Tastatur kein Ziffernblock hat und somit ASCII-Codes nicht schnell eintippbar sind ;)
 
Beide Schreibweisen haben ihre Vor- und Nachteile. Wenn du nach der IF-Abfrage mal zusätzliche Befehle einbauen willst, ist es ganz praktisch, wenn die Befehle nach der Bedingung schon in den geschweiften Klammern stehen. ;)
Ich werde mir die Klasse bei Gelegenheit auch mal anschauen, kann sie evtl. für ein Projekt gebrauchen. Daher schon mal "Vielen Dank" dafür...
 
Es geht immer smarter usw. aber man muss als programmierer letztendlich selber damit zurecht kommen. Ausnahmen bestehen nur wenn mehrere arbeiten oder wenn es den Code unnötig langsam macht.
 
Back
Top