Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Web-Programmierung / Entfernte Verbindungen herstellen
Senden und empfangen
Sobald ein Socket offen ist, tauschen Sie darüber Daten aus. Senden
Sie Text mit .print und lesen Sie mit .recv,
was zurückkommt:
my $conn = IO::Socket::INET.new(:host('raku.org'), :port(80));
$conn.print("GET / HTTP/1.0\r\nHost: raku.org\r\n\r\n");
my $response = $conn.recv;
$conn.close;
say $response.lines.first;Das sendet eine minimale HTTP-Anfrage und liest die Antwort des
Servers in $response. Die erste Zeile einer Antwort von
einem Webserver ist ihre Statuszeile.
Dieses Beispiel braucht eine funktionierende Netzverbindung. Beim Ausführen gibt es die Statuszeile der Antwort aus. Da
raku.orgeinfaches HTTP auf die gesicherte HTTPS-Seite umleitet, ist diese Zeile eine Umleitung, etwaHTTP/1.1 308 Permanent Redirect, und nicht200 OK. Die besondere Domäneexample.comleitet nicht um, dieselbe Anfrage dorthin zu richten gibt also schlichtHTTP/1.1 200 OKaus.
Zwei Einzelheiten sind beim Sprechen mit Servern wichtig. Erstens
trennen Netzprotokolle Zeilen gewöhnlich mit \r\n
(Wagenrücklauf plus Zeilenvorschub), nicht mit einem einfachen
\n, weshalb die Anfrage mit \r\n geschrieben
ist. Zweitens liefert .recv, was bisher an Daten
eingetroffen ist; bei größeren Antworten lesen Sie in einer Schleife,
bis die Verbindung schließt.
Bytes senden und Bytes empfangen ist alles, was ein Socket wirklich tut. Alles andere — HTTP und die übergeordneten Werkzeuge der kommenden Abschnitte — ist darauf aufgebaut.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Quiz — Sockets | Quiz — HTTP-Anfragen →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.