Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Webprogrammeren / Verbindingen op afstand maken
Verzenden en ontvangen
Zodra een socket open is, wissel je er gegevens door uit. Verstuur
tekst met .print, en lees wat terugkomt met
.recv:
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;Dit verstuurt een minimaal HTTP-verzoek en leest het antwoord van de
server in $response. De eerste regel van een antwoord van
een webserver is haar statusregel.
Dit voorbeeld heeft een werkende netwerkverbinding nodig. Bij het draaien drukt het de statusregel van het antwoord af. Omdat
raku.orggewone HTTP naar de beveiligde HTTPS-site omleidt, is die regel een omleiding, zoalsHTTP/1.1 308 Permanent Redirect, en niet200 OK. Het bijzondere domeinexample.comleidt niet om, dus hetzelfde verzoek daarheen richten drukt gewoonHTTP/1.1 200 OKaf.
Twee details doen ertoe wanneer je met servers praat. Ten eerste
scheiden netwerkprotocollen regels doorgaans met \r\n
(carriage return plus newline) en niet met een kale \n, en
daarom is het verzoek met \r\n geschreven. Ten tweede geeft
.recv terug welke gegevens tot dusver binnengekomen zijn;
voor grotere antwoorden lees je in een lus tot de verbinding sluit.
Bytes versturen en bytes ontvangen is alles wat een socket werkelijk doet. Al het andere — HTTP, en de gereedschappen op hoger niveau in de komende secties — is daarbovenop gebouwd.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — Sockets | Quiz — HTTP-verzoeken →
💪 Of ga direct naar de oefeningen in deze
sectie.