tema4

1
7/21/2019 Tema4 http://slidepdf.com/reader/full/tema4-56d834ae92e3e 1/1 9/15/2015  Assignment data:text/html;charset=utf-8,%3Cp%20id%3D%22yui_3_15_0_3_1442267492561_281%22%20style%3D%22margin%3A%200p… 1/1 Tema 5 - Client HTTP Data publicării: 08.05.2015 Data ultimei modificări a enunţului: 08.05.2015 Termenul de predare: 24.05.2015, ora 23:55 Responsabili: Catalin Leordeanu ([email protected]), Alecsandru Patrascu ([email protected]) Scrieti in C sau C++ un program client care se conecteaza la un server HTTP si downloadeaza pagina web ceruta de utilizator, existand posibilitatea de download recursiv (vezi specificatiile de mai jos). Un program cu functionalitate asemanatoare, dar mai extinsa, este wget  ( man wget  pentru detalii). Specificatii: Programul se va apela din linia de comanda astfel: ./myclient [-r] [-e] [-o <fisier_log>] http://<nume_server>/<cale_catre_pagina> Optiunile au urmatoarele semnificatii: -r (recursive): daca aceasta optiune este activata, programul va realiza download recursiv, adica va parcurge pagina web si in cazul in care intalneste link-uri, downloadeaza si paginile referite de acestea. Se presupune ca link-urile se refera numai la pagini de pe acelasi server, deci nu vor avea forma <a href= "http://...">...</a> , ci vor fi doar de forma <a href="cale_relativa_la_directorul_curent">...</a>. Fisierele referite de linkuri vor fi doar in format html. Pe calculatorul clientului se va crea o structura de directoare si fisiere asemanatoare cu cea de pe server, directorul parinte al acesteia avand nume identic cu al serverului. De exemplu, daca se cere downloadarea paginii http://site/test/dir1/ceva.html , pe calculatorul clientului pagina va avea urmatoarea cale: site/test/dir1/ceva.html  (iar directorul site se va afla in directorul curent) -e (everything): daca aceasta optiune este activata se vor downloada toate fisierele la care se face referire in paginile html printr-un link de forma <a href="cale_relativa_la_directorul_curent">...</a>. Se considera ca numele fisierelor vor avea o extensie de 3 sau 4 caractere. Aceasta optiune se poate utiliza in combinatie cu optiunea -r si se vor downloada toate fisierele .zip, .pdf, etc. pentru care exista link-uri in paginile parcurse. -o <fisier_log>: aceasta optiune specifica scrierea mesajelor de eroare intr-un fisier de log. Daca optiunea nu este activata, mesajele de eroare se scriu la iesirea standard de eroare (stderr). Atentie! Trebuie sa generati mesaje pentru toate cazurile in care apar erori, si sa specificati in aceste mesajele cauzele erorilor. Daca scrieti programul in C++ este de preferat sa utilizati exceptii. Precizari: Nivelul maxim de recursivitate pe care trebuie sa il suporte clientul este 5 (se considera ca pagina initiala este pe nivelul 1, paginile referite din ea pe nivelul 2 etc.) Veti downloada recursiv numai link-urile catre fisiere html (extensia .html sau .htm) de pe acelasi server, care pot avea una din urmatoarele forme: <a href = "page.html">...</a> <a href = "dir1/dir2/page.html">...</a> <a href = "../dir/page.htm">...</a> Link-urile catre pagini de pe alte servere (care incep cu " http://") sau catre sectiuni de pagina (care contin caracterul "#") vor fi ignorate. Nu trebuie sa tratati cazul in care pagina HTML contine comentarii (adica atunci cand intalniti un link, nu trebuie sa verificati daca se afla in interiorul unui comentariu). Pentru a crea directoare din cadrul unui program C sub Linux puteti folosi: functia system() , care are ca argument o comanda a sistemului de operare (in acest caz va fi comanda mkdir ) apelul de sistem mkdir  ( man 2 mkdir ) Testarea programului: Puteti testa programul conectandu-va la orice server HTTP. O adresa de test, care acopera cerintele temei, este http://www.cs.stir.ac.uk/~kjt/index.html . Pentru a verifica daca programul vostru functioneaza corect, puteti sa incarcati paginile si din browser sau cu comanda wget . Specificatia protocolului HTTP o gasiti la: http://www.faqs.org/rfcs/rfc1945.html ( HTTP1.0) si http://www.faqs.org/rfcs/rfc2616.html ( HTTP 1.1). Puteti utiliza HTTP 1.1 sau HTTP 1.0 (care este mai simplu).

Upload: toncuvasile

Post on 03-Mar-2016

212 views

Category:

Documents


0 download

DESCRIPTION

client http

TRANSCRIPT

Page 1: Tema4

7/21/2019 Tema4

http://slidepdf.com/reader/full/tema4-56d834ae92e3e 1/1

9/15/2015   Assignment

data:text/html;charset=utf-8,%3Cp%20id%3D%22yui_3_15_0_3_1442267492561_281%22%20style%3D%22margin%3A%200p… 1/1

Tema 5 - Client HTTP

Data publicării: 08.05.2015

Data ultimei modificări a enunţului: 08.05.2015

Termenul de predare: 24.05.2015, ora 23:55

Responsabili: Catalin Leordeanu ([email protected]), Alecsandru Patrascu

([email protected])

Scrieti in C sau C++ un program client care se conecteaza la un server HTTP si downloadeaza pagina web ceruta de

utilizator, existand posibilitatea de download recursiv (vezi specificatiile de mai jos). Un program cu functionalitate

asemanatoare, dar mai extinsa, este wget  (man wget  pentru detalii).

Specificatii:

Programul se va apela din linia de comanda astfel:

./myclient [-r] [-e] [-o <fisier_log>] http://<nume_server>/<cale_catre_pagina>

Optiunile au urmatoarele semnificatii:

-r (recursive): daca aceasta optiune este activata, programul va realiza download recursiv, adica va parcurge pagina web si in cazul in care intalneste

link-uri, downloadeaza si paginile referite de acestea. Se presupune ca link-urile se refera numai la pagini de pe acelasi server, deci nu vor avea

forma <a href= "http://...">...</a>, ci vor fi doar de forma <a href="cale_relativa_la_directorul_curent">...</a>. Fisierele referite de linkuri vor fi

doar in format html. Pe calculatorul clientului se va crea o structura de directoare si fisiere asemanatoare cu cea de pe server, directorul parinte al

acesteia avand nume identic cu al serverului. De exemplu, daca se cere downloadarea paginii http://site/test/dir1/ceva.html, pe calculatorul clientului

pagina va avea urmatoarea cale: site/test/dir1/ceva.html (iar directorul site se va afla in directorul curent)

-e (everything): daca aceasta optiune este activata se vor downloada toate fisierele la care se face referire in paginile html printr-un link de forma <a

href="cale_relativa_la_directorul_curent">...</a>. Se considera ca numele fisierelor vor avea o extensie de 3 sau 4 caractere. Aceasta optiune se poate

utiliza in combinatie cu optiunea -r si se vor downloada toate fisierele .zip, .pdf, etc. pentru care exista link-uri in paginile parcurse.

-o <fisier_log>: aceasta optiune specifica scrierea mesajelor de eroare intr-un fisier de log. Daca optiunea nu este activata, mesajele de eroare se scriu

la iesirea standard de eroare (stderr). Atentie! Trebuie sa generati mesaje pentru toate cazurile in care apar erori, si sa specificati in aceste mesajele

cauzele erorilor. Daca scrieti programul in C++ este de preferat sa utilizati exceptii.

Precizari:

Nivelul maxim de recursivitate pe care trebuie sa il suporte clientul este 5 (se considera ca pagina initiala este pe nivelul

1, paginile referite din ea pe nivelul 2 etc.)

Veti downloada recursiv numai link-urile catre fisiere html (extensia .html sau .htm) de pe acelasi server, care pot avea

una din urmatoarele forme:

<a href = "page.html">...</a>

<a href = "dir1/dir2/page.html">...</a>

<a href = "../dir/page.htm">...</a>

Link-urile catre pagini de pe alte servere (care incep cu "http://") sau catre sectiuni de pagina (care contin caracterul "#")

vor fi ignorate. Nu trebuie sa tratati cazul in care pagina HTML contine comentarii (adica atunci cand intalniti un link, nu

trebuie sa verificati daca se afla in interiorul unui comentariu).

Pentru a crea directoare din cadrul unui program C sub Linux puteti folosi:

functia system(), care are ca argument o comanda a sistemului de operare (in acest caz va fi comanda mkdir )

apelul de sistem mkdir  (man 2 mkdir )

Testarea programului:Puteti testa programul conectandu-va la orice server HTTP. O adresa de test, care acopera cerintele temei,

este http://www.cs.stir.ac.uk/~kjt/index.html . Pentru a verifica daca programul vostru functioneaza corect, puteti sa

incarcati paginile si din browser sau cu comanda wget .

Specificatia protocolului HTTP o gasiti la:http://www.faqs.org/rfcs/rfc1945.html (HTTP1.0)

si http://www.faqs.org/rfcs/rfc2616.html (HTTP 1.1). Puteti utiliza HTTP 1.1 sauHTTP 1.0 (care este mai simplu).