- Einleitung
- Beispiel
- Klassen
- Methoden (rex_socket)
- Methoden (rex_socket_proxy)
- Methoden (rex_socket_response)
- getBody (nur mit rex_socket_response)
- getBufferedBody (nur mit rex_socket_response)
- getHeader (nur mit rex_socket_response)
- getStatusCode (nur mit rex_socket_response)
- getStatusMessage (nur mit rex_socket_response)
- isClientError (nur mit rex_socket_response)
- isInformational (nur mit rex_socket_response)
- isInvalid (nur mit rex_socket_response)
- isOK (nur mit rex_socket_response)
- isRedirection (nur mit rex_socket_response)
- isServerError (nur mit rex_socket_response)
- isSuccessful (nur mit rex_socket_response)
- writeBodyTo (nur mit rex_socket_response)
rex_socket
baut eine http- bzw. https-Verbindung zu einer Url oder Datei auf. Für Verbindungen über einen Proxy Server steht die Klasse rex_socket_proxy
zur Verfügung. rex_socket_response
ist nicht zur direkten Nutzung vorgesehen. Es wird von rex_socket aufgerufen, sobald ein Response abgesetzt wird (siehe Klassen- und Methodenbeschreibung)
try {
//Baut die Verbindung auf. (Host, Port, SSL)
$socket = rex_socket::factory('www.example.com',443, true);
//Übergibt den Pfad an rex_socket
$socket->setPath('/url/to/my/resource?param=1');
//Übergib PHP Kontext-Optionen
$socket->setOptions([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
//Setzt einen Request ab und bekommt ein rex_socket_request-Objekt zurück
$response = $socket->doGet();
//Prüft, ob die Antwort 200 ist
if($response->isOk()) {
//liest die Informationen aus der Datei
$body = $response->getBody();
}
//Gibt im Falle einer fehlerhaften Verbindung einen Fehler zurück
} catch(rex_socket_exception $e) {
//error message: $e->getMessage()
}
Mit rex_socket
wird eine klassische Socket-Verbindung hergestellt. Die zur Verfügung stehenden Methoden sind weiter unten aufgeführt.
Mit rex_socket_proxy
kann man einzelne Verbindungen über einen ProxyServer herstellen. Diese Klasse erweitert rex_socket
um die Methoden setDestination und setDestinationUrl.
Sollen alle Verbindungen der gesamten Installation über einen Proxyserver übertragen werden ersetzt man in der config.yml
redaxo/data/core/config.yml
unter 'socket_proxy' den Valuenull
mit dem gewünschten Proxyserver. Danach werden alle Verbindungen automatisch (auch Verbindungen überrex_socket
) über diesen Proxy transferiert und der Einsatz vonrex_socket_proxy
ist nicht mehr nötig
Immer wenn über rex_socket
oder rex_socket_proxy
ein Request abgesetzt wird (doRequest, doGet, doPost, doDelete) bekommt man ein rex_socket_response-Objekt zurück. Hier stehen weitere Methoden zur Verfügung.
factory($host, $port, $ssl)
Baut eine Socket-Instanz auf, die URL wird anschließend über 'setPath()' übergeben.
Die Nutzung von SSL (HTTPS) wird über den 2. (Port) und 3. (SSL) Parameter gesteuert.
rex_socket::factory('www.example.com',443, true)
factoryUrl($url)
Baut eine Socket-Instanz direkt mit einer URL auf.
setPath($path)
Übergibt den kompletten Pfad bei der Verbindung über rex_socket::factory()
(beginnend mit /)
setOptions(array $options)
Es können alle Kontextoptionen aus PHP (z.B. bindto, backlog, ipv6_v6only, so_reuseport, so_broadcast, tcp_nodelay) werden (https://www.php.net/manual/de/context.php)
setTimeout($timeout)
Übergibt die gewünschte Timeout-Zeit in s oder ms
addBasicAuthorization($user, $password)
Setzt einen Header mit Benutzername und Passwort zur Authentifizierung an einem geschützten Server
addHeader($key, $value)
Setzt die gewünschten Header im $key, $value
Format. Zum Beispiel addHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12.4; rv:101.0) Gecko/20100101 Firefox/101.0')
doRequest($method, $data)
Setzt den Request ab. Für get
, post
und delete
gibt es alternativ eigene Methoden.
doGet()
Setzt einen Get-Request ab.
followRedirects($redirects)
Übergibt die Anzahl der Redirects der gefolgt werden soll bevor die Verbindung abgebrochen wird.
doPost($data, array $files)
Setzt einen Post-Request ab. Der Inhalt des Bodys kann als string, array oder callback übergeben werden. Dateien (mit Dateityp) können als Array übergeben werden.
doDelete()
Setzt ein Delete-Request ab.
Bei der Nutzung von rex_socket_proxy
stehen zusätzlich zu den oben genannten Methoden zusätzlich folgende Methoden zur Verfügung.
Wird die Verbindung über rex_socket_proxy
aufgebaut, übergibt man mit factory()
bzw. factoryURL()
den Proxyserver. Die eigentliche Ziel-Url wird mit setDestination()
übergeben.
rex_socket_proxy::factoryUrl($proxyServer)->setDestination($host, $port, $ssl)
Wird die Verbindung über rex_socket_proxy
aufgebaut, übergibt man mit factory()
bzw. factoryURL()
den Proxyserver. Die eigentliche Ziel-Url wird mit setDestinationUrl()
übergeben.
rex_socket_proxy::factoryUrl($proxyServer)->setDestinationUrl($url)
Immer wenn ein Request abgesetzt wird (doRequest, doGet, doPost, doDelete) bekommt man ein rex_socket_response-Objekt zurück. Hier stehen weitere Methoden zur Verfügung mit denen die Serverantwort und der Inhalt der Datei verarbeitet werden kann.
Die bevorzugte Methode um den Inhalt der Datei aufzurufen und zu verarbeiten. Im Hintergrund wird getBufferedBody()
(siehe nächste Methode und die einzelnen Chunks in eine Variable geschrieben. Somit erhält man den kompletten Inhalt einer Datei ohen sich Gedanken über Speicher Probleme machen zu müssen.
Diese Methode wird von getBody()
genutzt und ruft den Inhalt einer Datei in kleinen Teilen (Chunks) zu 1024 Zeichen ab um einen Speicherüberlauf zu vermeiden. Möchte man die Methode manuell nutzen muss man sie so oft aufrufen bis das Ergebnis false
ist. Die Größe der Chunks lässt sich als Parameter mit übergeben getBufferedBody(256)
getHeader()
gibt den gesamten Header der geöffneten Datei zurück. Die einzelnen Values lassen sich durch Mitgeben des jeweiligen keys ausgeben. Zum Beispiel `getHeader('Date')
getStatusCode()
gibt ausschließlich den Statuscode der geöffneten Datei zurück.
geteStatusMessage()
gibt ausschließlich die StatusMessage der geöffneten Datei zurück.
Antwortet der Server mit einem StatusCode zwischen 400 und 500 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit einem StatusCode zwischen 100 und 200 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit einem StatusCode kleiner 100 oder größer 600 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit dem StatusCode 200 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit einem StatusCode zwischen 300 und 400 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit einem StatusCode zwischen 500 und 600 wird true
zurückgegeben, andernfalls false
Antwortet der Server mit einem StatusCode zwischen 200 und 300 wird true
zurückgegeben, andernfalls false
Schreibt den aberufenen Body in eine Datei writeBodyTo($filname)
auf dem Server