Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Уеб програмиране / Отдалечени връзки
Изпращане и получаване
Щом сокетът е отворен, вие обменяте данни през него. Изпращайте текст
с .print, а четете онова, което се връща, с
.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;Това изпраща минимална HTTP заявка и прочита отговора на сървъра в
$response. Първият ред от отговора на уеб сървър е неговият
ред за състояние.
Този пример се нуждае от работеща мрежова връзка. При изпълнение той отпечатва реда за състояние на отговора. Понеже
raku.orgпренасочва обикновения HTTP към защитения HTTPS сайт, този ред е пренасочване, напримерHTTP/1.1 308 Permanent Redirect, а не200 OK. Специалният домейнexample.comне пренасочва, така че същата заявка, насочена натам, отпечатва обикновеноHTTP/1.1 200 OK.
При говоренето със сървъри значение имат две подробности. Първо,
мрежовите протоколи обикновено разделят редовете с \r\n
(връщане на каретката плюс нов ред), а не с обикновено \n —
затова заявката е записана с \r\n. Второ,
.recv връща онези данни, които са пристигнали дотук; за
по-големи отговори четете в цикъл, докато връзката не се затвори.
Изпращането на байтове и получаването на байтове е всичко, което сокетът всъщност прави. Всичко останало — HTTP и по-високоравнищните средства от следващите раздели — е изградено върху това просто „изпрати и получи“.
Практика
Направете 1 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Сокети | Тест — HTTP заявки →
💪 Или преминете направо към упражненията в този
раздел.