Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione web / Stabilire connessioni remote
Inviare e ricevere
Una volta che un socket è aperto, ci scambi dati attraverso. Invia
testo con .print e leggi ciò che torna con
.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;Questo invia una richiesta HTTP minima e legge la risposta del server
in $response. La prima riga di una risposta da un server
web è la sua riga di stato.
Questo esempio ha bisogno di una connessione di rete funzionante. Quando gira, stampa la riga di stato della risposta. Poiché
raku.orgreindirizza l’HTTP semplice al sito sicuro HTTPS, quella riga è un reindirizzamento, comeHTTP/1.1 308 Permanent Redirect, invece di200 OK. Il dominio specialeexample.comnon reindirizza, quindi puntare la stessa richiesta là stampa un sempliceHTTP/1.1 200 OK.
Nel parlare con i server contano due dettagli. Primo, i protocolli di
rete separano di solito le righe con \r\n (ritorno carrello
più a capo), non con un semplice \n, ed è per questo che la
richiesta è scritta con \r\n. Secondo, .recv
restituisce i dati arrivati fino a quel momento; per risposte più grandi
leggi in un ciclo finché la connessione non si chiude.
Inviare byte e ricevere byte è tutto ciò che un socket fa davvero. Tutto il resto — HTTP e gli strumenti di livello più alto delle sezioni che vengono — è costruito sopra questo semplice inviare e ricevere.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Socket | Quiz — Richieste HTTP →
💪 Oppure vai direttamente agli esercizi di questa
sezione.