10. cvičení - Programování internetových aplikací 1

Cíle cvičení

Napsat http klienta

Úkol (za 1 bod): Pro Windows nebo Linux (naopak než u chatu ze 7. cvičení, tj. v případě Windows chat serveru napsat Linux HTTP klienta) napsat HTTP klienta se syntaxí:

httpklient jmeno-pocitace port cesta-k-souboru

Pro tyto údaje program provede GET dotaz na server a vypíše:

Například pro dotaz:

httpklient phoenix.inf.upol.cz 80 /~drymld/ps/

by mohla odpověď vypadat takto:

Prijato: 1023 bytu

HTTP Hlavicka:
HTTP/1.1 200 OK
Date: Wed, 02 Dec 2009 09:15:47 GMT
Server: Apache/1.3.34 Ben-SSL/1.55 (Debian) PHP/4.4.4-8+etch6
Last-Modified: Wed, 25 Nov 2009 12:08:53 GMT
ETag: "adc380-2d0-4b0d1e55"
Accept-Ranges: bytes
Content-Length: 720
Connection: close
Content-Type: text/html
Content-Language: cs

HTTP Telo:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Počítačové sítě</title>
</head>

<body>
<h1>Počítačové sítě</h1>

<h2><a href="attendance-list-results.html">Seznam účastníků / výsledky</a></h2>

<h2>Seznam cvičení</h2>

<ul>
	<li>27.10. - <a href="lab04.html">4. cvičení - Linková vrstva</a></li>
	<li>4.11. - <a href="lab05.html">5. cvičení - Síťová vrstva 1</a></li>
	<li>11.11. - <a href="lab06.html">6. cvičení - Síťová vrstva 2</a></li>
	<li>18.11. - <a href="lab07.html">7. cvičení - Transportní vrstva</a></li>
	<li>25.11. - <a href="lab08.html">8. cvičení - DNS 1</a></li>
</ul>

</body>
</html>

k implementaci jsou potřeba struktury hostent a sockaddr_in a dále funkce:

A pro Windows verzi ještě strukturu WSADATA a funkci int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);.

HTTP GET hlavička, kterou je potřeba odeslat pro získání tohoto výsledku, vypadá pro příklad výše následovně:

GET /~drymld/ps/ HTTP/1.1
Host: phoenix.inf.upol.cz
Connection: close

A za ní je prazdný řádek.

Příklad TCP klienta pro Windows a Linux se dá najít na portálu builder.cz.

Napsat HTTP server

Úkol (za 1 bod): Pro Windows nebo Linux (naopak než u chatu ze 7. cvičení, tj. v případě Windows chat klienta napsat Linux HTTP server) napsat primitivní HTTP server se syntaxí:

httpserver cislo_portu koren_webu

Po spuštění s těmito parametry server začne poslouchat na zadaném portu (v Linuxu se dají pro normálního uživatele použít jen porty s vyšším číslem než 1023 na Windows je také doporučeno používat porty vyšší než 1023 a nižší než 50000).

Po přijetí následující HTTP GET hlavičky:

GET /text.txt HTTP/1.1
Host: localhost:1024
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.1.5) Gecko/20091123 Iceweasel/3.5.5 (like Firefox/3.5.5; Debian-3.5.5-1)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: cs,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Keep-Alive: 300
Connection: keep-alive

Načte obsah souboru koren_webu/text.txt a odešle ho klientovi v následujícím tvaru:

HTTP/1.1 200 OK
Content-Type: text/html

odesilana zprava

Za odeslanou zprávou je prázdný řádek.

Zavolat tento server je možné z WWW prohlížeče pomocí URL http://localhost:port_na_kterem_server_posloucha/text.txt a jako odpověď by měl zobrazit obsah odesílané zprávy jako HTML.

Stačí aby byl server schopen správně odesílat jen textové soubory. V případě že požadovaný soubor neexistuje, pošle odpověď s kódem 404:

HTTP/1.1 404 Not Found
Content-Type: text/html

soubor nenalezen

Za odeslanou zprávou je prázdný řádek.

Další informace k TCP serveru, se dají najít pro Windows a pro Linux na serveru www.builder.cz.