GithubHelp home page GithubHelp logo

thewest123 / wget-clone Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 260 KB

C++ Clone of wget --mirror

License: GNU General Public License v3.0

Makefile 1.28% HTML 2.30% JavaScript 9.23% CSS 35.62% C++ 51.58%
clone cvut cvut-fit fit-ctu fit-cvut https-client mirror openssl regex wget

wget-clone's Introduction

BI-PA2 Semestral - Wget Downloader

ZADÁNÍ Z PROGTESTU

Jednoduchý downloader

Napište program podobný nástroji wget --mirror, který na příkazové řádce z URL (HTTP) vytvoří lokální kopii. Musí podporovat:

  • převedení všech URL tak, aby odkazovaly na správné soubory na disku
  • prochází stránky rekurzivně (bez opakovaného stahování)
  • umožňuje omezit hloubku rekurzivního procházení (hodnotou, omezením na podporované URL)

Downloader navíc umožňuje upravovat ukládané html a to následujícími způsoby:

  • Odkazy na obrázky mohou vést na původní url, nebo na obrázek uložený na disku
  • Odkazy na stránku, která má větší hloubku, mohou vést buď na původní URL, nebo na stránku na disku, která uživateli oznámí, že stránka neexistuje

Volitelně: Vícevláknové stahování, podpora HTTPS

Kde lze využít polymorfismus? (doporučené)

  • Zpracování souborů: HTML stránka (potřebuje určité úpravy), obrázek (prostě se stáhne), CSS (úpravy nepotřebuje, ale mohou tam být obrázky), ...
  • Úprava HTML tagů: upravení tagů s obrázky, opravení odkazů, ...
  • Styl procházení: BFS, DFS, HTML pages first (přednost HTML stránky před obrázky), ...

ROZŠÍŘENÍ ZADÁNÍ (Checkpoint)

Bude se jednat o command line utilitu, která bude implementovat základní chování nástroje wget. Jako parametr bude přijímat adresu HTTP stránky, kterou chceme naklonovat. Dalšími parametry lze nástroj více konfigurovat, například:

  • hloubka stahování
  • zpracování obrázků (nechat původní URL / přepsat na lokální URL)
  • zpracování hlubších souborů (nechat původní URL / přepsat na URL lokálního error souboru)
  • přidání hlavičkových parametrů (např. pokud bychom chtěli vložit cookie sauth-tokenem)
  • cesta výstupního adresáře
  • úroveň logování (verbose, info, error aj.), případně cesta k log souboru
  • načtení konfigurace ze souboru

Třída HttpDownloader

  • bude využita pro samotné připojení k serveru a stažení požadovaného souboru pomocí Http GET
  • metoda setHeader() umožní upravit header GET požadavku (nastavit cookies či další parametry)
  • metoda get() stáhne soubor a uloží na disk

Třída Config

  • ukládá uživatelem specifikovaná nastavení
  • poskytuje rozhraní pro další části programu, aby mohly získat nastavené hodnoty
  • po spuštení programu zparsuje CLI parametry, případně načte configurační soubor (CLI parametry přepisují hodnoty ze souboru)

Třída Logger

  • uchovává nastavení o úrovni logování (nejspíše enum)
  • poskytuje rozhraní pro různé úrovně logování
  • ukládá logy buďto na STDOUT/STDERR či do samostatných souborů

Využití polymorfismu

Polymorfismus bude využit na různé druhy stahovaných souborů. Každý zdrojový kód má jinou syntaxi a je potřeba ho jinak zpracovat (např. na převedení odkazů na lokální URL).

Base třída File

  • Uchovává svou URL (příp. cestu na disku) a aktuální hloubku
  • virtual metoda download()
  • vhodná na ostatní nespecifikované soubory (obrázky, textové dokumenty, binární soubory ...), které nepotřebují dále zpracovávat

Potomek FileHtml

  • Přepisuje download()
    • Volá svoje zpracování staženého HTML souboru
    • Přepíše URL odkazy ve staženém souboru a rekurzivně zavolá stahování dalších URL
  • Má další svoje metody, např. na parse()

Potomek FileCss

  • Přepisuje download()
    • Volá svoje zpracování staženého CSS souboru
    • Provede úpravy (pokud jsou nutné) a rekurzivně zavolá stahování dalších URL
  • Má další svoje metody, např. na parse()

AKTUÁLNÍ IMPLEMENTACE

HttpDownloader

  • Změněn na HttpsDownloader s podporou SSL připojení a verifikací certifikátů
  • S neblokujícími sockety
  • Ukládání souboru na disk řeší nově CFile
  • Metoda setHeader() nevyužita, nastavení se bere rovnou z Config třídy

Config

  • Obsahuje další parametry navíc
  • Chybí načítání ze souboru

CFile

  • Polymorfismus využit dle checkpointu

wget-clone's People

Contributors

thewest123 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.