| Autore: Hrvoje Niksic ed altri | Data: 14/09/2002 |
| Revisione: 1.0 | Progetto Italiano Documentazione OS/2 ed eCS |
| Oggetto: Manuale di GNU Wget | Traduttore: Mentore Siesto |
È garantito il permesso a copiare, distribuire e/o modificare questo documento sotto i termini della GNU Free Documentation License, Versione 1.1 o ogni altra versione superiore pubblicata dalla Free Software Foundation; le sezioni non variabili sono "GNU General Public License" e "GNU Free Documentation License", senza testi di copertina. Una copia della licenza è contenuta in questo documento, intitolata "GNU Free Documentation License".
GNU Wget è un'utilità gratuita per lo scaricamento non-interattivo di file dal Web. Wget supporta i protocolli HTTP, HTTPS, ed FTP, così come il recupero attraverso proxy HTTP.
Questo capitolo è una introduzione alle funzioni di Wget.
Per default, Wget è molto semplice da invocare. La sintassi base è
wget [opzione]... [URL]...
Wget scaricherà tutti gli URL specificati nella linea di comando. URL è uno Uniform Resource Locator, come definito sotto.
Si potrebbe comunque voler cambiare alcuni dei parametri predefiniti di Wget. Lo si può fare in due modi: permanentemente, aggiungendo il comando appropriato al file `.wgetrc' (sezione File di avvio), oppure specificandolo sulla linea di comando.
URL è l'acronimo del termine Uniform Resource Locator. Un URL è una stringa che rappresenta una risorsa disponibile in Internet. Wget riconosce la sintassi degli URL definita nel RFC1738. Questa è la forma più usata (le parentesi quadre denotano parti opzionali):
http://host[:port]/directory/file ftp://host[:port]/directory/file
È possibile codificare nome utente e password in un URL:
ftp://user:password@host/path http://user:password@host/path
user o password o entrambi possono essere evitati. Se si evita di specificare il nome utente HTTP, o la password, non verrà spedita alcuna autenticazione. Evitando di specificare il nome utente in FTP, verrà usato il termine `anonymous'. Evitando di specificare la password in FTP, verrà fornito l'indirizzo di email come password predefinita. (1)
È possibile codificare caratteri non sicuri in un URL, come
`%xy', dove xy è il codice esadecimale del valore
ASCII del carattere. Alcuni caratteri non sicuri sono `%'
(scritto come `%25'), `:' (scritto
`%3A'), e `@' (scritto come `%40'). Si
faccia riferimento al RFC1738 per una lista completa di questi caratteri.
Wget supporta inoltre la funzione type per URL FTP. Per default,
i documenti FTP sono recuperati in modo binario (tipo `i'), ossia
vengono scaricati senza modifiche. Un altro modo utile è il modo
`a' (ASCII), che converte i delimitatori di
linea tra i diversi sistemi operativi, e pertanto è utile per i file di
testo. Ecco un esempio:
ftp://host/directory/file;type=a
Due varianti di specifiche di URL sono supportate, per motivi storici (o isterici?) e per il loro ampio uso.
Sintassi FTP (supportata da NcFTP):
host:/dir/file
Sintassi HTTP (introdotta con Netscape):
host[:port]/dir/file
Queste due forme alternative sono deprecate, e potrebbero non essere più supportate in futuro.
Se non si capisce la differenza tra queste notazioni, o non si sa quale usare,
è sufficiente usare il formato ordinario usato con il browser preferito, come
Lynx o Netscape.
Wget usa GNU getopts per elaborare i suoi argomenti, per cui ogni opzione ha una forma breve e una lunga. Le forme lunghe sono più semplici da ricordare, ma sono lunghe a scriversi. È possibile mescolare liberamente stili diversi per le opzioni, o specificare le opzioni dopo gli argomenti della linea di comando. Così, è possibile scrivere
wget -r --tries=10 http://fly.srk.fer.hr/ -o log
Lo spazio tra un'opzione che accetta un argomento e l'argomento stesso può essere omesso. Invece di `-o log' si può scrivere `-olog'.
Si possono attaccare tra loro opzioni che non richiedono argomenti, come:
wget -drc URL
Questa forma equivale a:
wget -d -r -c URL
Dato che le opzioni possono essere specificate dopo gli argomenti, si può terminarle con `--'. Per cui, la frase seguente cercherà di scaricare l'URL `-x', riportando i fallimenti in `log':
wget -o log -- -x
Le opzioni che accettano liste separate da virgole rispettano la convenzione
secondo cui specificare una lista vuota ne cancella i valori. Questo può
essere utile per ripulire le impostazioni di `.wgetrc'. Per esempio,
se nel file `.wgetrc' exclude_directories è impostato a
`/cgi-bin', il seguente esempio lo cancellerà e quindi lo imposterà
a `/~nobody' e `/~somebody'. è anche possibile cancellare
l'elenco in `.wgetrc' (consultare Sintassi di Wgetrc).
wget -X " -X /~nobody,/~somebody
<base href="url"> ai documenti
oppure specificando `--base=url' nella linea di
comando.
<base
href="url"> al file HTML, o usando l'opzione
`--base'.
bind()
all'indirizzo ADDRESS sulla macchina locale. ADDRESS
può essere specificato come nome di host o come indirizzo IP. Quest'opzione
può essere utile se la macchina è legata a IP multipli.
Nell'eseguire Wget senza `-N', `-nc', o
`-r', scaricare lo stesso file nella stessa directory porterà
a preservare la copia originale del file e a chiamare la seconda copia con
nome `file.1'. Se il file viene scaricato nuovamente,
la terza copia verrà nominata `file.2', e così via.
Se si specifica `-nc', questo comportamento viene soppresso,
e Wget si rifiuterà di scaricare nuove copie di
`file'. Pertanto, "no-clobber" è un nome
improprio per questo modo -- non viene prevenuto il "clobbering" (dato che i
suffissi numerici già prevengono il clobbering), quanto piuttosto il
salvataggio di versioni multiple.
Eseguendo Wget con l'opzione `-r', ma senza specificare le opzioni `-N' o `-nc', re-scaricare il file porterà semplicemente alla sovrascrittura della vecchia copia. Aggiungere `-nc' previene questo comportamento, causando il mantenimento della vecchia versione e ignorando ogni nuova copia sul server
Eseguendo Wget con l'opzione `-N', con o senza `-r', la decisione di scaricare o meno una nuova copia del file dipenderà dalle informazioni di tempo locali e remote del file (consultare Time-Stamping). `-nc' può non essere specificato nella stessa linea di `-N'.
Si noti che quando viene specificato `-nc', file con suffisso `.html' o (yuck) `.htm' verranno caricati dal disco locale ed elaborati come se fossero stati recuperati dal Web.
wget -c ftp://sunsite.doc.ic.ac.uk/ls-lR.ZSe c'è un file chiamato `ls-lR.Z' nella directory corrente, Wget assumerà che si tratti della prima porzione del file remoto, e chiederà al server di continuare il recupero da una locazione pari alla lunghezza del file locale.
Si noti che non è necessario specificare quest'opzione se si vuole soltanto che la corrente istanza di Wget riprovi lo scaricamento di un file, in caso la connessione si perda. Questo è il comportamento predefinito. `-c' influenza solo la ripresa di scaricamenti iniziati prima di questa istanza di Wget, i cui file locali siano ancora presenti.
Senza `-c', l'esempio precedente scaricherebbe il file remoto come `ls-lR.Z.1', lasciando intatto il file `ls-lR.Z'.
A partire da Wget 1.7, usando `-c' su un file non vuoto, e se il server non supporta la continuazione dello scaricamento, Wget si rifiuterà di far partire il download da capo, cosa che rovinerebbe i contenuti preesistenti. Se si vuole scaricare il documento da capo, si rimuova il file.
Sempre a partire da Wget 1.7, se si usa `-c' su un file delle stesse dimensioni di quello sul server, Wget si rifiuterà di scaricare il file e stamperà un messaggio di spiegazioni. Lo stesso accadrà se il file sul server risulterà più piccolo di quello sul disco locale --- "continuare" lo scaricamento non ha più significato.
D'altro canto, usando `-c', qualsiasi file sul server di
dimensioni maggiori di quello locale sarà considerato come download
incompleto e solo un numero di byte pari a (lunghezza(remoto) -
lunghezza(locale)) verrà scaricato, per essere appeso al file locale.
Questo comportamento può essere ottimo in certi casi -- per esempio, si può
usare `wget -c' per scaricare solo la nuova porzione di una
collezione di dati o di un file di log.
Comunque, se il file è di dimensioni maggiori sul server perché è stato cambiato, e non semplicemente aggiornato, il risultato sarà un file danneggiato. Wget non può verificare che il file locale sia effettivamente un prefisso valido del file remoto. è necessaria molta cautela nell'uso di `-c' insieme a `-r', dato che ogni file sarà considerato candidato al grado di "download incompleto".
Un altro caso in cui si può ottenere un file danneggiato nel tentativo di usare `-c' si ha con un proxy HTTP imperfetto, che inserisce una stringa "trasferimento interrotto" nel file locale. Nel futuro potrebbe venire aggiunta un'opzione "rollback" per trattare simili casi.
Attenzione: l'opzione `-c' funziona solo con server FTP e HTTP
che supportano l'intestazione Range.
Usando questo indicatore, è possibile anche impostare lo
stile specificando il tipo come
`dot:stile'. Stili diversi assegnano significati
diversi a ogni punto. Con lo stile default ogni punto rappresenta
un kB, ci sono 10 punti in un cluster e 50 punti in una linea. Lo stile
binary ha un orientamento più "computereccio": ogni punto
segnala 8 kB, i cluster sono dati da 16 punti e vengono tracciati 48 punti per
linea (linee di 348 kB). Lo stile mega è usato per scaricare
grandi file: ogni punto rappresenta 64 kB, ci sono otto punti in un cluster, e
48 punti per linea (ogni linea contiene 3 MB).
Specificando `--progress=bar', Wget traccerà una gradevole barra ASCII (come la colonnina di un termometro) per indicare il recupero. Se l'uscita non è un terminale, quest'opzione verrà ignorata, e Wget userà l'indicatore a punti. Se si vuole forzare l'uso dell'indicatore a barra, si usi `--progress=bar:force'.
wget --spider --force-html -i bookmarks.htmlQuesta funzione richiede molto lavoro perché Wget si avvicini alle funzionalità dei veri spider web.
Si consiglia di non ridurre il tempo limite predefinito con quest'opzione, a meno che non si sappia cosa si sta facendo.
m, in ore usando
h o in giorni usando il suffisso d.
Specificare un valore alto per quest'opzione è utile se la rete o l'host di destinazione è "down", così che Wget può attendere abbastanza a lungo da aspettarsi ragionevolmente che l'errore sia corretto prima di riprovare.
Un articolo recente di una pubblicazione dedicata allo sviluppo su una popolare piattaforma consumer ha fornito il codice per effettuare quest'analisi al volo. Il suo autore suggeriva il bloccaggio al livello di indirizzo classe C per assicurare che i programmi di recupero automatico venissero bloccati, nonostante il cambiamento degli indirizzi forniti dal DHCP.
L'opzione `--random-wait' è stata ispirata da questa raccomandazione a bloccare l'accesso a un file a molti utenti, a causa delle azioni di uno solo.
Si noti che la quota non influenza il download di un singolo file. Pertanto, specificando `wget -Q10k ftp://wuarchive.wustl.edu/ls-lR.gz', il file `ls-lR.gz' verrà comunque scaricato. Lo stesso avviene se vengono specificati molti URL sulla linea di comando. Comuque, la quota è rispettata nel recupero ricorsivo, o da un file di ingresso. Così è possibile scrivere `wget -Q2m -i sites' in sicurezza: il download verrà terminato quando la quota sarà stata superata. Impostare la quota a 0 oppure a `inf' cancella il limite.
Si prenda ad esempio la directory a `ftp://ftp.xemacs.org/pub/xemacs/'. Se la si recupera con `-r', essa verrà salvata localmente sotto `ftp.xemacs.org/pub/xemacs/'. Mentre l'opzione `-nH' può rimuovere la parte `ftp.xemacs.org/', rimarrà ancora la componente `pub/xemacs'. Tramite `--cut-dirs', Wget non "vedrà" number componenti delle directory remote. Ecco svariati esempi di come funziona number.
Senza opzioni: -> ftp.xemacs.org/pub/xemacs/ -nH -> pub/xemacs/ -nH --cut-dirs=1 -> xemacs/ -nH --cut-dirs=2 -> . --cut-dirs=1 -> ftp.xemacs.org/xemacs/ ...Se si vuole eliminare la struttura di directory, questa opzione è simile a una combinazione di `-nd' e `-P'. Comunque, a differenza di `-nd', `--cut-dirs' non si perde con le sottodirectory: per esempio, con `-nH --cut-dirs=1', una sottodirectory `beta/' verrà posta sotto `xemacs/beta', come ci si aspetterebbe.
Si noti che i nomi di file così cambiati verranno scaricati ogni volta che si riesegue il mirroring di un sito, dato che Wget non sa se il file locale `X.html' corrisponda o meno all'URL remoto `X' (non sa ancora che l'URL produce un'uscita di tipo `text/html'). Per prevenire questo ri-scaricamento, è necessario usare `-k' e `-K' così che la versione originale del file verrà salvata come `X.orig' (si consulti la sezione Opzioni per il download ricorsivo).
basic (insicuro)
o digest.
Un'altra via per specificare nome utente e password è nell'URL stesso (si consulti Formato URL). Per informazioni aggiuntive sulla sicurezza con Wget, consultare Considerazioni di sicurezza.
Set-Cookie, e il client risponde
con lo stesso cookie in presenza di richieste successive. Dato che i cookie
permettono agli amministratori dei server di tracciare i visitatori e i siti
possono scambiarsi queste informazioni, alcune persone li considerano una
violazione della privacy. Il comportamento predefinito è di usare i cookie:
comunque, il loro immagazzinamento è per default disattivato.
Quest'opzione viene tipicamente usata nel mirroring di siti che richiedono che si sia collegati con essi, per accedere ad alcuni dei loro contenuti. Il processo di login tipicamente richiede che il server mandi un cookie HTTP all'atto della ricezione, e verifichi le credenziali dell'utente. Il cookie viene dunque rispedito dal browser nell'accedere a quella parte del sito, e questo prova l'identità dell'utente.
Il mirroring di un sito simile richiede che Wget mandi gli stessi cookie mandati dal browser nel comunicare con il sito. Questo si può ottenere tramite `--load-cookies': basta puntare Wget alla posizione del file `cookies.txt', e Wget manderà gli stessi cookie che il browser manderebbe nella stessa situazione. Browser differenti mantengono i file dei cookie in locazioni differenti:
wget --cookies=off --header "Cookie: name=value"
Content-Length fasulle, che portano Wget a pensare
che il documento non sia stato completamente scaricato. Si può ipotizzare
questo comportamento se Wget riprova continuamente a scaricare lo stesso
documento, lamentandosi che la connessione (normale in altri casi) si è
chiusa sempre sullo stesso byte.
Tramite quest'opzione, Wget ignorerà l'intestazione
Content-Length, come se mai fosse esistita.
Si possono definire più intestazioni addizionali specificando `--header' più volte.
wget --header='Accept-Charset: iso-8859-2' \
--header='Accept-Language: hr' \
http://fly.srk.fer.hr/
Specificare una stringa vuota come intestazione cancellerà tutte le
intestazioni aggiuntive precedentemente definite.
basic.
Il protocollo HTTP permette ai client di identificarsi usando un'intestazione
User-Agent. Questo permette di distinguere il software per WWW,
di solito per scopi statistici o per tracciare violazioni di protocollo.
Normalmente Wget si identifica come `Wget/version',
dove version è l'attuale versione di Wget.
Peraltro, alcuni siti seguono la politica di modificare la loro uscita in
accordo alle informazioni ricevute con User-Agent.
Concettualmente non è una cattiva idea, ma essa è abusata da server che
negano informazioni a client diversi da Mozilla o Microsoft
Internet Explorer. Quest'opzione permette di cambiare la linea
User-Agent spedita da Wget. L'uso di quest'opzione peraltro è
sconsigliato, a meno che non si sappia cosa si sta facendo.
Si noti che anche se Wget scrive verso un nome di file noto per questo file,
questo non è un "buco" nella sicurezza, se un utente rende
`.listing' un link simbolico verso `/etc/passwd' o qualcosa
di simile, e chiede a root (amministratore di sistemi Un*x) di
lanciare Wget nella sua directory. In dipendenza dalle opzioni usate, Wget si
rifiuterà di scrivere su `.listing', facendo fallire l'operazione di
globbing/ricorsione/time-stamping, oppure il link simbolico verrà cancellato
e sostituito dal file `.listing' corrente, oppure l'elenco verrà
salvato in un file `.listing.number'.
Anche se questa situazione non è problematica, comunque, root
non dovrebbe mai lanciare Wget nella directory di un utente non fidato. Un
utente potrebbe fare qualcosa di semplice, come collegare
`index.html' a `/etc/passwd' e chiedere a root
di lanciare Wget con le opzioni `-N' o `-r',
sovrascrivendo così il file.
NdT: queste considerazioni si applicano in sistemi Un*x. Non sono valide per un client eCS o OS/2: non so se possano applicarsi ad ambienti Warp Server.
wget ftp://gnjilux.srk.fer.hr/*.msgPer default il globbing è attivato se l'URL contiene un carattere jolly. Quest'opzione può essere usata per attivarlo o disattivarlo permanentemente.
Si potrebbe dover quotare l'URL per proteggerla da un'espansione effettuata
dalla shell in cui si lavora. Il globbing porta Wget a cercare un elenco di
directory, che è specifico del sistema. Ecco perché quest'operazione
funziona correttamente solo su server FTP Un*x e su quelli che emulano
l'uscita del comando ls di Un*x.
Specificando `--retr-symlinks' i link simbolici sono attraversati e i file da essi puntati vengono recuperati. Attualmente, quest'opzione non forza Wget a interpretare link simbolici a directory e ricorrere attraverso di esse, ma in futuro dovrebbe venire potenziato a questo scopo.
Si noti che nel recupero di un file (non di una directory) che era stato specificato nella linea di comando (piuttosto che a causa di un download ricorsivo) quest'opzione non ha effetto. I link simbolici sono sempre attraversati in questo caso.
wget -r -nd --delete-after http://whatever.com/~popular/page/L'opzione `-r' serve al download ricorsivo, e `-nd' è usata per non creare subdirectory.
Si noti che `--delete-after' cancella file sulla macchina locale. Essa non invia il comando `DELé a siti FTP remoti, per esempio. Si noti anche che quando viene specificato `--delete-after', l'opzione `--convert-links' viene ignorata, così che i file `.orig' semplicemente non vengono creati in prima istanza.
Ogni link verrà cambiato in una di queste due vie:
Per esempio: se il file scaricato `/foo/doc.html' si collega a `/bar/img.gif', anch'esso scaricato, il collegamento presente in `doc.html' verrà modificato per puntare a `../bar/img.gif'. Questo tipo di trasformazione funziona bene per combinazioni arbitrarie di directory.
Per esempio: se il file scaricato `/foo/doc.html' si collega a `/bar/img.gif' (o a `../bar/img.gif'), allora il collegamento in `doc.html' verrà modificato per puntare verso `http://hostname/bar/img.gif'.
Si noti che solo alla fine dello scaricamento Wget può sapere quali collegamenti sono stati scaricati. Per questo motivo, il lavoro fatto con `-k' viene effettuato alla fine di tutti i download.
Normalmente, nello scaricamento di una singola pagina HTML, i documenti che potrebbero essere necessari alla sua visualizzazione non vengono scaricati. Tramite `-r' e `-l' si può fare qualcosa, ma Wget non distingue tra documenti esterni e "inline", per cui normalmente ci si ritrova con documenti "volanti" che mancano di alcuni requisiti.
Diciamo per esempio che il documento `1.html' contanga un tag
<IMG> che si riferisce a `1.gif', e un tag
<A> che punta a un documento esterno `2.html'.
Diciamo che `2.html', similmente, contenga un link a un'immagine
`2.gif' e si colleghi a `3.html', e via così.
Eseguendo il comando
wget -r -l 2 http://site/1.htmlverranno scaricati i file `1.html', `1.gif', `2.html', `2.gif', e `3.html'. Come si può vedere, a `3.html' manca il requisito `3.gif', poiché Wget conta il numero di passi (fino a 2) da `1.html' per determinare dove fermare la ricorsione. Però con il comando
wget -r -l 2 -p http://site/1.htmltutti i file elencati, incluso il file `3.gif', verranno scaricati. Similmente
wget -r -l 1 -p http://site/1.htmlscaricherà `1.html', `1.gif', `2.html', e `2.gif'. Si potrebbe pensare che
wget -r -l 0 -p http://site/1.htmlscarichi solo `1.html' e `1.gif', ma sfortunatamente non è così, dato che `-l 0' equivale a `-l inf', ossia ricorsione infinita. Per scaricare un solo file HTML (o una manciata di file, specificati in linea di comando o in un file di input segnalato dall'opzione `-i') e i suoi file requisiti, è sufficiente eliminare `-r' e `-l':
wget -p http://site/1.htmlNotare che Wget si comporterà come se fosse specificato `-r', ma solo quella singola pagina e i suoi requisiti verranno scaricati. I collegamenti da quella pagina a documenti esterni non verranno seguiti. Attualmente, per scaricare una singola pagina e tutti i suoi requisiti (anche se esistenti su siti web separati), e assicurarsi che il blocco venga correttamente mostrato in locale, l'autore preferisce usare alcune opzioni in aggiunta a `-p':
wget -E -H -k -K -p http://site/documentCompletiamo l'argomento dicendo che Wget considera "collegamento a un documento esterno" qualsiasi URL specificata in un tag
<A>, <AREA> o
<LINK> oltre che <LINK
REL="stylesheet">.
In passato, l'opzione `-G' era la miglior scelta per scaricare una pagina singola e i suoi requisiti, tramite una linea di comando come
wget -Ga,area -H -k -K -r http://site/documentComunque, l'autore di quest'opzione ha notato una pagina con tag come
<LINK REL="home" HREF="/"> e ha compreso che
`-G' non è sufficiente. Non si può semplicemente dire a Wget di
ignorare <LINK>, dato che così i fogli di stile non
vengono scaricati. Ora la migliore scelta per il download di una singola
pagina e dei suoi requisiti è l'opzione dedicata
`--page-requisites'.
GNU Wget è in grado di attraversare pezzi del Web (o un singolo server HTTP o FTP), seguendo i collegamenti e la struttura delle directory. Viene chiamato recupero ricorsivo, o ricorsione.
Con URL HTTP, Wget recupera e legge il codice HTML dall'URL dato, i documenti,
recuperando i file cui il documento HTML si riferiva, attraverso markup come
href, o src. Se il file appena scaricato è di tipo
text/html, anche questo verrà analizzato e seguito.
Il recupero ricorsivo di contenuti HTTP e HTML è breadth-first. Questo significa che Wget scarica prima il documento HTML richiesto, poi i documenti da esso collegati, quindi i documenti cui questi ultimi si collegano e così via. In altre parole, Wget prima di tutto scarica i documenti al livello 1, poi quelli al livello 2 e così via fino alla profondità massima specificata.
The maximum depth to which the retrieval may descend is specified with the `-l' option. The default maximum depth is five layers.
Nel recuperare ricorsivamente un URL FTP, Wget recupererà tutti i dati
dalla data directory (incluse le subdirectory fino alla profondità
specificata) sul server remoto, creandone un'immagine (mirror) locale. Anche
il recupero FTP è limitato dal parametro depth. A differenza
della ricorsione HTTP, la ricorsione FTP è effettuata in base alla
profondità (depth-first).
Pre default, Wget creerà un albero locale di directory corrispondente a quello trovato sul server remoto.
Il recupero ricorsivo può avere diverse applicazioni, la più importante delle quali è il mirroring. è anche utile per presentazioni WWW, e qualsiasi altra occasione in cui sarebbe opportuno tralasciare connessioni lente di rete e memorizzare i file localmente.
Bisogna tenere in mente che i recuperi ricorsivi possono sovraccaricare il server remoto. Per questo motivo, molti amministratori di sistema li disapprovano e potrebbero bandirvi dal sito se rilevano rapidi download di grandi quantità di dati. Nello scaricare da server Internet, si consideri l'uso dell'opzione `-w' per introdurre un ritardo tra gli accessi al sistema. Il download impiegherà più tempo, ma l'amministratore del server non sarà allarmato dalla rudezza.
Ovviamente, il download ricorsivo potrebbe causare problemi anche alla macchina locale. Se lasciato a sé potrebbe facilmente riempire tutto il disco. Nello scaricare da reti locali, può prendere molta banda sul sistema, così come consumare memoria e tempo di CPU.
Si cerchi di specificare i criteri che corrispondono al tipo di download si sta cercando di effettuare. Se si vuole scaricare solo una pagina, si usi `--page-requisites' senza ricorsioni addizionali. Se si vuole scaricare il materiale in una directory si usi `-np' per evitare di scaricare materiale da altre directory. Volendo scaricare tutto quel che c'è in una directory, si usi `-l 1' per accertarsi che la ricorsione non superi il livello 1 di profondità. Si consulti la sezione Seguire collegamenti, per dettagli.
Il recupero ricorsivo va usato con cura.
Durante un recupero ricorsivo, si desidera non scaricare dati non necessari. Per la maggior parte dei casi l'utente ha chiaro in mente quel che vuole scaricare, e vuole che Wget segua solo collegamenti specifici.
Per esempio, se si vuole scaricare l'archivio musicale da `fly.srk.fer.hr', si vorrà scaricare tutte le home page che appaiono riferite da una parte oscura dell'archivio.
Wget dispone di molti meccanismi che permettono di calibrare finemente quali collegamenti dovrà seguire.
La funzione di download ricorsivo di Wget normalmente si rifiuta di visitare host diversi da quello specificato sulla linea di comando. Questo è un comportamento ragionevole; senza di esso, qualsiasi recupero potrebbe trasformare Wget in una versione ridotta di google.
Peraltro la visita di host differenti (host spanning) è alle volte utile. è possibile che le immagini siano fornite da un server diverso. è possibile che si stia effettuando il mirroring di un sito consistente di pagine interconnesse tra tre server. è possibile che il server abbia due nomi equivalenti, e le pagine HTML si riferiscano a entrambi.
wget -rH -Dserver.com http://www.server.com/Si può specificare più di un indirizzo separandoli con una virgola, per esempio `-Ddomain1.com,domain2.com'.
wget -rH -Dfoo.edu --exclude-domains sunsite.foo.edu \
http://www.foo.edu/
Scaricando materiale dal web, spesso si vuole restringere il recupero solo a certi tipi di file. Per esempio, se si è interessati a scaricare immagini GIF, non sarà gradevole scaricare una massa di documenti PostScript (ecc.).
Wget offre due opzioni per trattare il problema. Ogni opzione presenta un nome lungo, un nome breve e il comando equivalente in `.wgetrc'.
Allora, specificando `wget -A gif,jpg' Wget scaricherà soltanto i file che terminano per `gif' o `jpg', nell'esempio immagini GIF o JPEG. D'altra parte, `wget -A "zelazny*196[0-9]*"' scaricherà soltanto file che cominciano per `zelazny' e contengono numeri tra 1960 e 1969. Si consulti il manuale di riferimento della propria shell (o la guida alla linea di comando per gli utenti OS/2 - eCS, NdT) per una descrizione delle corrispondenze.
Ovviamente, è possibile combinare un numero qualsiasi di estensioni e schemi in un elenco di dati separati da virgole, passati come argomento di `-A'.
Per cui, se si vuole scaricare un'intera pagina escludendo gravosi file MPEG e .AU, si può usare `wget -R mpg,mpeg,au'. Analogamente, per scaricare tutti i file tranne quelli che cominciano per `bjork', si usi `wget -R "bjork*"'. Le virgolette servono per prevenire l'espansione dei caratteri jolly da parte della shell.
Le opzioni `-A' e `-R' possono essere combinate per un ulteriore perfezionamento nei file da recuperare. Per esempio, `wget -A "*zelazny*" -R .ps' scaricherà tutti i file che presentano `zelazny' come parte del loro nome, ma non se si tratta di file PostScript.
Si noti che queste due opzioni non riguardano il recupero di file HTML; Wget deve scaricare tutti i file HTML per sapere dove andare -- in caso contrario il recupero ricorsivo non avrebbe senso.
A parte le altre funzioni di inseguimento dei collegamenti, è spesso utile porre restrizioni a quali file recuperare, basandosi sulle directory in cui questi file sono posti. Ci possono essere molte ragioni per questo -- le home page potrebbero essere organizzate in una struttura di director ragionevole, oppure alcune directory potrebbero contenere informazioni inutili, per esempio `/cgi-bin' o `/dev'.
Wget offre tre diverse opzioni per trattare queste richieste. Ogni opzione descritta presenta un nome breve, un nome lungo, e il comando equivalente nel file `.wgetrc'.
Per cui, se si vuole scaricare da `http://host/people/bozo/' seguendo solo i collegamenti ai collegati di bozo nella directory `/peoplé e gli script in `/cgi-bin', si può scrivere
wget -I /people,/cgi-bin http://host/people/bozo/
Come per `-A'/`-R', queste due opzioni possono essere combinate per perfezionare lo scaricamento. Per esempio, se si vuole scaricare tutto il contenuto della gerarchia `/pub' eccetto per `/pub/worthless', si specifichi `-I/pub -X/pub/worthless'.
L'opzione `--no-parent' (in breve, `-np') è utile in questo caso. Usare quest'opzione garantisce che la gerarchia esistente non verrà mai lasciata. Supponiamo di aver lanciato Wget con
wget -r --no-parent http://somehost/~luzer/my-archive/Si può essere sicuri del fatto che nessuno dei riferimenti a `/~his-girls-homepage/' o `/~luzer/all-my-mpegs/' verrà seguito. Solo l'archivio a cui si è interessati verrà scaricato.
Quando viene attivata l'opzione `-L', solo i collegamenti relativi vengono sempre seguiti. I collegamenti relativi sono qui definiti come quelli che non si riferiscono alla radice del server web. Per esempio, i seguenti sono collegamenti relativi:
<a href="foo.gif"> <a href="foo/bar.gif"> <a href="../foo/bar.gif">
Questi invece non sono relativi:
<a href="/foo.gif"> <a href="/foo/bar.gif"> <a href="http://www.server.com/foo/bar.gif">
L'uso di questa opzione garantisce che il recupero ricorsivo non scorrerà gli host, anche senza l'opzione `-H'. In casi semplici, permette allo scaricamento di funzionare senza dover convertire collegamenti.
Quest'opzione probabilmente non è particolarmente utile, e potrebbe venire rimossa in una versione futura.
Le regole riguardanti l'FTP sono in qualche modo specifiche, dato che è necessario che lo siano. I collegamenti FTP in documenti HTML sono spesso inclusi per scopi di riferimento, e spesso non conviene scaricarli per default.
Perché i collegamenti a FTP vengano seguiti da documenti HTML, è necessario specificare l'opzione `--follow-ftp'. Fatto questo, i collegamenti FTP scorreranno anche per gli host senza interessarsi dell'opzione `-H'. Questo è logico, dato che raramente un collegamento FTP punta allo stesso host in cui risiede il server HTTP. Per ragioni similari, l'opzione `-L' non ha effetto su questi scaricamenti. D'altra parte le opzioni di accettazione dei domini (`-D') e le regole di suffisso (`-A' e `-R') funzionano correttamente.
Si noti inoltre che i collegamenti a directory FTP seguiti non verranno recuperati in modo ricorsivo.
Uno degli aspetti più importanti nel mirroring di informazioni dalla rete è l'aggiornamento dei propri archivi.
Scaricare un intero archivio ripetutamente solo per rimpiazzare pochi file modificati è costoso, in termini di banda e di denaro, e di tempo necessario all'aggiornamento. Ecco perché tutti i tool di mirroring forniscono una funzione di aggiornamento incrementale.
Un meccanismo come questo implica che il server remoto viene analizzato in cerca di nuovi file. Solo questi nuovi file verranno scaricati al posto dei precedenti.
Un file è considerato nuovo se risponde a una di queste condizioni:
Per implementare questo controllo, il programma deve conoscere la data dell'ultima modifica dei file locale e remoto. Quest'informazione viene chiamata impronta temporale o time-stamp del file.
Il time-stamping in GNU Wget viene attivato usando `--timestamping'
(`-N'), oppure inserendo la direttiva
timestamping = on in `.wgetrc'. Con questa opzione,
per ogni file da scaricare, Wget controlla che esista un file locale con lo
stesso nome. Se esiste, e il file remoto è più vecchio del file locale,
Wget non eseguirà lo scaricamento.
Se il file locale non esiste, o le dimensioni dei file non corrispondono, Wget scaricherà il file remoto senza interessarsi delle impronte temporali.
L'uso del time-stamping è semplice. Si voglia per esempio scaricare un file mantenendone la data di modifica.
wget -S http://www.gnu.ai.mit.edu/
Un semplice ls -l (o dir /p in CMD.EXE, NdT per gli
utenti eCS o OS/2) mostra che la data di modifica del file locale è uguale
allo stato dell'intestazione Last-Modified, così come viene
ritornata dal server. Come si può vedere, le informazioni di tempo sono
preservate in locale anche senza `-N' (almeno per l'HTTP).
Diversi giorni dopo, si vuole che Wget controlli se il file remoto è stato modificato, e lo scarichi se necessario.
wget -N http://www.gnu.ai.mit.edu/
Wget chiederà al server la data dell'ultima modifica. Se il file locale ha la stessa impronta temporale di quello remoto, o una nuova, il file remoto non verrà recuperato. Se però il file remoto è più recente, Wget procederà al suo scaricamento.
Lo stesso vale per l'FTP. Per esempio
wget "ftp://ftp.ifi.uio.no/pub/emacs/gnus/*"
(Le virgolette attorno all'URL servono affinché la shell non cerchi di interpretare il carattere `*'.)
Dopo il download, un elenco locale di directory mostrerà che le informazioni di tempo corrispondono a quelle sul server. Rilanciando il comando con l'opzione `-N', Wget recupererà nuovamente solo i file modificati dalla data dell'ultimo scaricamento.
Volendo per esempio un mirror dell'archivio GNU ogni settimana, si vorrebbe usare un comando come questo, settimanalmente:
wget --timestamping -r ftp://ftp.gnu.org/pub/gnu/
Notare che il time-stamping funziona solo per i file per i quali il server
fornisce un'impronta. Per l'HTTP, la cosa dipende dal recupero di un'intestazione
Last-Modified. Per l'FTP, dipende dal recuperare o meno un
elenco di directory con date in un formato comprensibile da Wget
(consultare Timestamping FTP).
Il time-stamping in HTTP è implementato con il controllo dell'intestazione
Last-Modified. Se si desidera recuperare il file
`foo.html' tramite HTTP, Wget controllerà che il file
`foo.html' esista localmente. Se non è così, `foo.html'
verrà comunque scaricato.
Se il file esiste in locale, Wget controllerà prima di tutto la sua impronta
temporale locale (similmente al risultato di ls -l), quindi
invierà una richiesta HEAD al server remoto, richiedendogli
informazioni sul file remoto.
L'header Last-Modified viene esaminato per comprendere quale
file è stato modificato più di recente (il che lo rende "nuovo"). Se il file
remoto è più recente, verrà scaricato; se è meno recente, Wget si
fermerà.(2)
Se viene specificato `--backup-converted' (`-K') in congiunzione con `-N', il file `X' del server viene confrontato con il file locale `X.orig', se esistente, piuttosto che con il file locale `X', che sarà sempre differente se è stato convertito tramite l'opzione `--convert-links' (`-k').
Ragionevolmente, il time-stamping HTTP dovrebbe essere implementato usando la
richiesta If-Modified-Since.
In teoria, il time-stamping FTP funziona come quello HTTP, tranne per il fatto che in FTP non esistono le intestazioni: le impronte temporali devono essere derivate dall'elenco di directory.
Se un download FTP è ricorsivo o usa il globbing, Wget userà il comando FTP
LIST per avere un elenco di file per la directory contenente i
file desiderati. Tenterà di analizzare l'elenco, trattandolo come il risultato
di un comando Unix ls -l, estraendo le impronte temporali.
Le operazioni rimanenti sono le stesse dell'HTTP. Si noti che nel recupero di
file singoli da un server FTP senza globbing o ricorsione, gli elenchi di file
non verranno scaricati (e quindi non ci saranno impronte temporali) a meno
che non si usi `-N'.
Ritenere che ogni elenco di directory rispecchi lo stile Unix può sembrare molto limitante, ma non è così in pratica, dato che molti server FTP non Unix usano il formato Unix, poiché molti client (tutti?) lo comprendono. Si tenga presente che il RFC959 non definisce un metodo standard per ricevere un elenco di file, tralasciando le impronte temporali. Si spera che in futuro uno standard definisca questi particolari.
Un'altra soluzione non standard include l'uso del comando MDTM,
supportato da alcuni server FTP (incluso il popolare wu-ftpd), che
ritorna il tempo esatto del file specificato. Wget potrebbe supportare questo
comando in futuro.
Una volta saputo come cambiare le impostazioni predefinite di Wget tramite la linea di comando, si può voler rendere permanenti alcune opzioni. Ciò è fattibile in modo comodo creando il file di avvio di Wget, `.wgetrc'.
A parte `.wgetrc', che è il file di inizializzazione "principale" di Wget, è conveniente avere una sede particolare per immagazzinare password. Così Wget legge e interpreta i contenuti di `$HOME/.netrc', se questa viene trovata. Il formato di `.netrc' può essere consultato nella documentazione dei sistemi Unix.
Wget legge `.wgetrc' all'avvio, riconoscendo un insieme limitato di comandi.
Durante l'inizializzazione, Wget cerca un file di avvio globale, per default `/usr/local/etc/wgetrc' (o con prefissi diversi da `/usr/local', se Wget non è stato installato là --- è il caso delle macchine eCS-OS/2) e legge i comandi ivi presenti, se esiste.
Quindi, Wget controllerà la presenza di un file utente. Se la variabile
d'ambiente WGETRC è settata, Wget tenterà di leggere quel file.
In caso di fallimento non saranno effettuati altri tentativi.
Se WGETRC non è settata, Wget cercherà di caricare il file
`$HOME/.wgetrc'.
Il fatto che le impostazioni utente vengano caricate dopo quelle valide per il sistema significa che, in caso di conflitto, i comandi dell'utente hanno la precedenza su quelli validi a livello di sistema (in `/usr/local/etc/wgetrc' per default). Via gli amministratori fascisti!! :))) --- Ovviamente questo discorso non è valido per l'utenza OS/2 - eCS, essendo singoli client.
La sintassi di un comando di wgetrc è semplice:
variabile = valore
La variabile viene anche chiamata comando. I valori validi differiscono per i vari comandi.
I comandi non fanno distinzione tra maiuscole e minuscole, e non tengono conto del carattere sottolineatura. Pertanto, `DIr__PrefiX' è uguale a `dirprefix'. Linee vuote, linee che cominciano per `#' e linee contenenti solo spazi sono ignorate.
Comandi che accettano un elenco di valori separati da virgole cancelleranno tale elenco se il comando è vuoto. Pertanto, se si vuole per esempio annullare la lista di reiezioni specificata nel `wgetrc' globale, si può fare così:
reject =
Sotto è fornito l'elenco completo dei comandi. I valori validi sono elencati dopo il `='. Valori booleani possono essere settati o azzerati usando `on' e `off', o `1' e `0'. Uno stile differente di booleano permesso in alcuni casi è il lockable Boolean, che può essere impostato a `on', `off', `always', o `never'. Se un'opzione è impostata a `always' o `never', tale valore verrà bloccato (fissato) per la durata dell'intera invocazione di Wget; le opzioni della linea di comando non avranno precedenza.
Alcuni comandi accettano valori pseudo-arbitrari. Valori address possono essere nomi di host, o indirizzi IP. n può essere qualsiasi intero positivo, o `inf' per "infinito" (dove appropriato). Valori string possono essere stringhe non vuote.
La maggior parte di questi comandi ha equivalenze alla linea di comando (consultare Invocazione), alcuni dei più oscuri o meno usati non ne ha.
Content-Length;
equivale a `--ignore-length'.
Content-Length.
Ecco il file di inizializzazione di esempio dato nella distribuzione. Esso è diviso in due sezioni; una per l'uso globale (valido come file di avvio globale), e una per l'uso locale (utile come `$HOME/.wgetrc'). Si presti attenzione alle modifiche che si eseguono.
Si noti che quasi tutte le linee sono commentate. Perché un comando abbia effetto, si deve rimuovere il carattere `#' all'inizio della linea.
### ### File .wgetrc di esempio ### ## Questo file può essere usato per cambiare il comportamento di wget o per ## evitare di dover scrivere molte opzioni in linea di comando. Questo file ## non contiene una completa lista dei comandi -- si consulti il manuale ## per vedere cosa può essere inserito qui. ## ## Il file di inizializzazione di Wget può essere posto in /usr/local/etc/wgetrc ## (globale) o $HOME/.wgetrc (per un singolo utente). ## ## Per usare le impostazioni in questo file, si deve de-commentarle, ## così come cambiarle in molti casi, dato che i valori nelle linee commentate ## sono valori predefiniti (per esempio, "off"). ## ## Impostazioni globali (utili per l'impostazione in /usr/local/etc/wgetrc). ## Attenzione a cosa si fa qui, le impostazioni potrebbero ridurre le funzioni ## di wget, e farlo comportare in modo contrario alla documentazione: ## # Si può impostare la quota di scaricamento per principianti specificando un # valore, eventualmente seguito da 'K' (kilobytes) o 'M' (megabytes). La quota # predefinita è illimitata. #quota = inf # Si può abbassare (o innalzare) il numero predefinito di tentativi nello # scaricamento di un file (default, 20). #tries = 20 # Abbassare la massima profondità nel download ricorsivo è utile per evitare # che un principiante vada troppo "in giù" nell'avviare un download # ricorsivo. Il valore predefinito è 5. #reclevel = 5 # Molti siti si trovano dietro firewall che non permettono l'inizio di # connessioni dall'esterno. Su questi siti è necessario usare la funzione # "passiva" dell'FTP. Se ci si trova dietro una simile firewall, si può # attivare tale funzione per far usare la modalità passiva a Wget. #passive_ftp = off # Il comando "wait" sotto fa sì che Wget aspetti tra una connessione e l'altra. # Se, invece, si vuole che Wget aspetti solo tra una riprova e l'altra di un # download fallito, si imposti waitretry al massimo numero di secondi da attendere # (Wget userà il "linear backoff", aspettando un secondo dopo il primo fallimento # su un file, 2 secondi dopo il secondo fallimento, etc. fino a tale massimo). waitretry = 10 ## ## Impostazioni locali (per un utente, valide nel suo $HOME/.wgetrc). è ## *altamente* sconsigliato porre tali impostazioni nel file globale, dato che ## esse sono potenzialmente pericolose per l'"utente normale". ## ## Anche nel preparare il proprio ~/.wgetrc, sarebbe bene sapere bene cosa ## si sta facendo. ## # Impostare a on per usare il timestamping: #timestamping = off # è bene far sì che Wget mandi il proprio indirizzo email in un'intestazione # `From:' con la richiesta (così che l'amministratore di sistema possa # contattarvi in caso di errore). Wget *non* manda `From:' inizialmente. #header = From: Your Name <username@site.domain> # Si possono impostare altre intestazioni, come Accept-Language. Accept-Language # *non* è spedito, per default. #header = Accept-Language: en # Si possono impostare i proxy predefiniti per l'HTTP e l'FTP. # Essi prevalgono sui valori impostati nelle variabili d'ambiente. #http_proxy = http://proxy.yoyodyne.com:18023/ #ftp_proxy = http://proxy.yoyodyne.com:18023/ # Si imposti questo a off se non si vogliono usare i proxy. #use_proxy = on # Si può personalizzare il rapporto sugli scaricamenti. Opzioni valide sono, # default, binary, mega e micro. #dot_style = default # Impostare questo valore a off fa in modo che Wget non scarichi /robots.txt. # Ci si assicuri di sapere *bene* cosa è /robots.txt e come viene usato, prima # di cambiare il default! #robots = on # Può essere utile far attendere Wget tra le connessioni. Impostare questa #voce al numero di secondi di attesa desiderati. #wait = 0 # Si può forzare la creazione della struttura di directory, anche se viene # recuperata una sola directory, impostando questa variabile a on. #dirstruct = off # Si può attivare il download ricorsivo per default (da non fare se non si # sa bene cosa significa) impostando questa variabile a on. #recursive = off # Per copiare sempre il file X come X.orig prima di convertirne i collegamenti # (grazie a to -k / --convert-links / convert_links = on), # si imposti questa variabile a on: #backup_converted = off # Perché Wget segua collegamenti FTP da file HTML per default, impostare # questa variabile a on: #follow_ftp = off
Gli esempi sono divisi in tre sezioni, basate generalmente sulla loro complessità.
wget http://fly.srk.fer.hr/
wget --tries=45 http://fly.srk.fer.hr/jpg/flyweb.jpg
wget -t 45 -o log http://fly.srk.fer.hr/jpg/flyweb.jpg &Il simbolo "&" alla fine della linea porta Wget a lavorare in secondo piano (NdT: questo vale per sistemi Unix, non per macchine eCS - OS/2, in cui comunque basta usare una seconda richiesta comandi). Per eliminare i limiti sul numero di tentativi, si usi `-t inf'.
wget ftp://gnjilux.srk.fer.hr/welcome.msg
wget ftp://prep.ai.mit.edu/pub/gnu/ links index.html
wget -i fileSpecificando `-' come nome di file, le URL verranno lette dallo standard input.
wget -r http://www.gnu.org/ -o gnulog
wget --convert-links -r http://www.gnu.org/ -o gnulog
wget -p --convert-links http://www.server.com/dir/page.htmlLa pagina HTML verrà salvata in `www.server.com/dir/page.html', e le immagini, i fogli di stile ecc. sotto `www.server.com/', in dipendenza da dove si trovavano nel server remoto.
wget -p --convert-links -nH -nd -Pdownload \
http://www.server.com/dir/page.html
wget -S http://www.lycos.com/
wget -s http://www.lycos.com/ more index.html
wget -r -l2 -P/tmp ftp://wuarchive.wustl.edu/
wget -r -l1 --no-parent -A.gif http://www.server.com/dir/Più verboso, ma con lo stesso effetto. `-r -l1' significa recuperare ricorsivamente (consultare Recupero ricorsivo), con una profondità massima pari a 1. `--no-parent' indica che i riferimenti alla directory superiore vengono ignorati (si consulti Limiti di directory), e `-A.gif' indica di scaricare solo file GIF. Anche `-A "*.gif"' avrebbe funzionato correttamente.
wget -nc -r http://www.gnu.org/
wget ftp://hniksic:mypassword@unix.server.com/.emacs
wget -O - http://jagor.srce.hr/ http://www.srce.hr/Si possono combinare le opzioni e realizzare delle "pipe" per recuperare i documenti da hotlist remote:
wget -O - http://cool.list.com/ | wget --force-html -i -
crontab 0 0 * * 0 wget --mirror http://www.gnu.org/ -o /home/me/weeklog
wget --mirror --convert-links --backup-converted \
http://www.gnu.org/ -o /home/me/weeklog
wget --mirror --convert-links --backup-converted \
--html-extension -o /home/me/weeklog \
http://www.gnu.org/
O più semplicemente:
wget -m -k -K -E http://www.gnu.org/ -o /home/me/weeklog
Questo capitolo contiene il materiale che non ha posto altrove.
I Proxy sono server HTTP speciali, designati per trasferire dati da server remoti a client locali. Un uso tipico dei proxy è quello di alleggerire il carico di rete per utenti dietro una connessione lenta. Ciò si ottiene canalizzando tutte le richieste HTTP ed FTP attraverso il proxy, che pone in una cache i dati trasferiti. Quando una risorsa in cache viene richiesta una seconda volta, il proxy ritornerà i dati dalla cache. Un altro uso dei proxy è fatto dalle compagnie che separano (per motivi di sicurezza) le loro reti interne dal resto di Internet. Per ottenere dati dal Web, gli utenti si connettono e acquisiscono i dati remoti tramite un proxy autorizzato.
Wget supporta i proxy per HTTP ed FTP. La via standard di sopecificare la locazione di un proxy, riconosciuta da Wget, è l'uso delle seguenti variabili d'ambiente:
http_proxy
ftp_proxy
no_proxy
no_proxy è `.mit.edu', il proxy non verrà usato
per recuperare documenti dal MIT.
Oltre alle variabili d'ambiente, la locazione del proxy e le impostazioni possono essere specificate direttamente da Wget.
Alcuni server proxy richiedono un'autorizzazione all'uso. L'autorizzazione
consiste di un nome utente username e di una password,
che devono essere spedite da Wget. Come per l'autorizzazione HTTP esistono
parecchi schemi di autorizzazione. Per l'autorizzazione proxy solo lo schema
Basic è implementato attualmente.
Si possono specificare il nome utente e la password tramite l'URL del proxy o tramite le opzioni della linea di comando. Supponendo che il proxy della compagnia sia posto a `proxy.company.com' alla porta 8001, una locazione URL di proxy contenente i dati dell'autorizzazione potrebbe essere come questa:
http://hniksic:mypassword@proxy.company.com:8001/
Alternativamente si possono usare le opzioni `proxy-user' e
`proxy-password', e le impostazioni equivalenti di `.wgetrc'
proxy_user e proxy_passwd per impostare il nome
utente e la password per il proxy.
Come tutte le utilità GNU, l'ultima versione di Wget può essere trovata all'archivio principale GNU prep.ai.mit.edu, e ai suoi mirror. Per esempio Wget 1.8.1 può essere trovato all'url ftp://prep.ai.mit.edu/gnu/wget/wget-1.8.1.tar.gz. La versione per OS/2 - eCS è rintracciabile al sito hobbes.nmsu.edu oppure http://unixos2.org.
Wget ha una mailing list all'email wget@sunsite.dk, grazie a Karsten Thygesen. La mailing list serve per discussioni sulle funzioni di Wget e sul web, per riportare bug di Wget (quelli che si ritengono interessanti per il pubblico) e annunci. Siete i benvenuti: più siamo meglio è!
Per iscriversi alla mailing list, si mandi una mail all'indirizzo wget-subscribe@sunsite.dk, con la parola `subscribé nella linea dell'oggetto della mail. Per de-iscriversi basta mandare un'email a wget-unsubscribe@sunsite.dk.
La mailing list è archiviata all'url http://fly.srk.fer.hr/archive/wget. Un archivio alternativo è disponibile a {http://www.mail-archive.com/wget%40sunsite.auc.dk/
Bug report sono benvenuti all'indirizzo bug-wget@gnu.org.
Prima di riportare un bug, si cerchino di seguire alcune semplici linee guida.
Inoltre, mentre potrebbe interessarmi conoscere i contenuti del file `.wgetrc', il solo riportare il messaggio di debug è forse una cattiva idea. Invece, sarebbe bene prima cercare di capire se il bug si ripete dopo aver portato via `.wgetrc'. Solo se si capisce che le impostazioni di `.wgetrc' influenzano il bug, mi si mandino le parti rilevanti del file.
gdb `which wget` core e scrivendo where per avere
un backtrace.
Wget usa GNU Autoconf per la configurazione e la compilazione, ed evita l'uso di funzioni speciali-ultra-mega-favolose di dialetti di Unix, per cui dovrebbe essere compilabile e funzionante su tutti gli Unix più comuni (e non, come per esempio su OS/2 e su eCS, NdT).
Varie versioni di Wget sono state compilate e controllate sotto molte varianti di Unix, inclusi Solaris, Linux, SunOS, OSF (aka Digital Unix), Ultrix, *BSD, IRIX, e altri; si consulti il file `MACHINES' nella directory di distribuzione per avere una lista completa. Se si riesce a compilare Wget su un'architettura non elencata qui, si prega di comunicarlo.
Wget dovrebbe eseguire correttemante anche su altri sistemi Unix, non elencati in `MACHINES'. Se no, si prega di comunicarlo.
Grazie a gentili collaboratori, questa versione di Wget può essere compilata e funziona su piattaforme Microsoft Windows 95 e Windows NT. è stato compilato con successo usando i compilatori MS Visual C++ 4.0, Watcom, e Borland C, usando Winsock come software di networking. Naturalmente è ridotto, dato che alcune funzioni sono disponibili solo in Unix, ma dovrebbe funzionare come sostituto per chi è bloccato a Windows. Si noti che il port per Windows non è controllato né mantenuto da me... Tutte le domande e i problemi dovrebbero essere riportati alla mailing list di Wget, all'email wget@sunsite.dk.
Lo scopo di Wget è quello di lavorare in secondo piano, per cui esso riceve
il segnale di hang-up SIGHUP e lo ignora. Se l'uscita va allo
standard output, viene ridiretta a un file chiamato `wget-log'.
In altri casi SIGHUP viene ignorato. Questo è conveniente se si
desidera ridirigere l'uscita di Wget dopo averlo lanciato.
$ wget http://www.ifi.uio.no/~larsi/gnus.tar.gz & $ kill -HUP %% # Redirect the output to wget-log
Oltre a ciò, Wget non tenta di interferire con i segnali.
C-c, kill -TERM e kill -KILL
dovrebbero poter uccidere il processo.
NdT: queste considerazioni possono non applicarsi a OS/2 - eCS, o quantomeno
non nello stesso modo. Non ho effettuato prove in merito.
Questo capitolo contiene riferimenti che possono rivelarsi utili.
È molto semplice portare Wget a vagbondare per un sito, prendendo tutti i dati disponibili. `wget -r site' è sufficiente. Ottimo? Non per l'amministratore di sistema.
Se Wget recupera pagine statiche, il problema non è significativo. Ma per Wget non esistono differenze tra una pagina statica e un CGI, molto più esigente in termini di risorse. Per esempio, un sito che conosco ha una sezione gestita da un, ehm, rognoso script CGI che converte tutti i file di tipo Info in HTML. Lo script può ridurre la macchina in ginocchio senza fornire niente di utile a chi scarica.
Per casi del genere sono stati sviluppati vari schemi di esclusione di robot, come mezzo per gli amministratori di sistema e gli autori di documenti per proteggere parti scelte dei propri siti dal vagabondare di robot.
Il meccanismo più popolare è il Robot Exclusion Standard, o RES, scritto da Martijn Koster et al. nel 1994. Esso specifica il formato di un file di testo contenente direttive che istruiscono il robot su quali percorsi di URL evitare. Per essere trovato dai robot, le specifiche devono essere poste in `/robots.txt' nella directory radice del server, un file che i robot scaricano ed elaborano.
Wget supporta le specifiche RES nel download ricorsivo. Così, dando:
wget -r http://www.server.com/
Innanzitutto verrà scaricato l'indice di `www.server.com'. Se Wget nota che deve scaricare più documenti da tale server, richiederà allo stesso il file `http://www.server.com/robots.txt' e, se trovato, lo userà per i download seguenti. `robots.txt' viene scaricato una volta sola per ogni server.
Fino alla versione 1.8, Wget supportava la prima versione dello standard, scritta da Martijn Koster nel 1994 e disponibile all'url http://www.robotstxt.org/wc/norobots.html. Dalla versione 1.8, Wget ha aggiunto il supporto delle direttive addizionali specificate nella bozza Internet `<draft-koster-robots-00.txt>' intitolata " Un metodo per il controllo dei Robot web". La bozza, che per quanto ne so non è mai arrivata al grado di RFC, è disponibile a http://www.robotstxt.org/wc/norobots-rfc.txt.
Questo manuale non include più il testo del RES.
Il secondo meccanismo, meno noto, abilita l'autore di un singolo documento a
specificare se vuole che i collegamenti a questo file siano seguiti da un
robot. Ciò si ottiene mediante un META tag, come nel seguente
esempio:
<meta name="robots" content="nofollow">
Questo meccanismo è spiegato in http://www.robotstxt.org/wc/meta-user.html. Wget supporta questo metodo di esclusione, in aggiunta alla classica esclusione tramite `/robots.txt'.
Nell'uso di Wget, bisogna tener presente che esso spedisce password non crittografate in rete, cosa che può porre problemi di sicurezza. Ecco i problemi principali, e alcune soluzioni.
ps (sotto Unix). Se questo è un problema, si eviti di porre
password in linea di comando - per esempio si può usare il file
`.netrc'.
GNU Wget è stato scritto da Hrvoje Nik@v{s}i'{c} (hniksic@arsdigita.com). Comunque, il suo sviluppo non potrebbe essere arrivato dov'è, se non fosse stato per l'aiuto di molte persone, con bug report, proposte di funzioni, correzioni o lettere di ringraziamento.
Ringraziamenti speciali alle seguenti persone (senza ordine):
ansi2knr al volo. Molte correzioni
per la portabilità.
Digest.
Le seguenti persone hanno fornito correzioni, rapporti su bug/compilazioni, suggerimenti utili, servizi di beta testing, posta e tutto quel che rende così divertente la manutenzione di un programma:
Ian Abbott,
Tim Adam,
Adrian Aichner,
Martin Baehr,
Dieter Baron,
Roger Beeman,
Dan Berger,
T. Bharath,
Paul Bludov,
Daniel Bodea,
Mark Boyns,
John Burden,
Wanderlei Cavassin,
Gilles Cedoc,
Tim Charron,
Noel Cragg,
Kristijan @v{C}onka@v{s},
John Daily,
Andrew Davison,
Andrew Deryabin,
Ulrich Drepper,
Marc Duponcheel,
Damir D@v{z}eko,
Alan Eldridge,
Aleksandar Erkalovi'{c},
Andy Eskilsson,
Christian Fraenkel,
Masashi Fujita,
Howard Gayle,
Marcel Gerrits,
Lemble Gregory,
Hans Grobler,
Mathieu Guillaume,
Dan Harkless,
Herold Heiko,
Jochen Hein,
Karl Heuer,
HIROSE Masaaki,
Gregor Hoffleit,
Erik Magnus Hulthen,
Richard Huveneers,
Jonas Jensen,
Simon Josefsson,
Mario Juri'{c},
Hack Kampbj@o rn,
Const Kaplinsky,
Goran Kezunovi'{c},
Robert Kleine,
KOJIMA Haime,
Fila Kolodny,
Alexander Kourakos,
Martin Kraemer,
Hrvoje Lacko,
Daniel S. Lewart,
Nicol'{a}s Lichtmeier,
Dave Love,
Alexander V. Lukyanov,
Jordan Mendelson,
Lin Zhe Min,
Tim Mooney,
Simon Munton,
Charlie Negyesi,
R. K. Owen,
Andrew Pollock,
Steve Pothier,
Jan P@v{r}ikryl,
Marin Purgar,
Csaba R'{a}duly,
Keith Refson,
Tyler Riddle,
Tobias Ringstrom,
Edward J. Sabol,
Heinz Salzmann,
Robert Schmidt,
Andreas Schwab,
Chris Seawood,
Toomas Soome,
Tage Stabell-Kulo,
Sven Sternberger,
Markus Strasser,
John Summerfield,
Szakacsits Szabolcs,
Mike Thomas,
Philipp Thomas,
Dave Turner,
Russell Vincent,
Charles G Waldman,
Douglas E. Wegscheid,
Jasmin Zainul,
Bojan @v{Z}drnja,
Kristijan Zimmer.
Le mie scuse a coloro che ho accidentalmente dimenticato, e molti ringraziamenti a tutti gli iscritti alla mailing list di Wget.
GNU Wget è licenziato sotto la GNU GPL, cosa che lo rende software libero.
Si noti che "libero" (free) si riferisce alla libertà e non al prezzo. Come alcuni avvocati del progetto GNU amano puntualizzare, si pensi al "libero discorrere" piuttosto che a "birra gratis". I termini legali e leganti esatti per la distribuzione sono citati qui sotto; in breve, si ha il diritto (la libertà) di lanciare e cambiare Wget, e di distribuirlo ad altre persone, e anche - volendo - richiedere denaro per altri servizi. La restrizione fondamentale è che è necessario garantire gli stessi diritti e imporre le stesse restrizioni ad altri.
Questo metodo di licenziare software è noto anche come open source dato che, tra le altre cose, fa sì che chiunque riceva il codice sorgente assieme al programma, e possa migliorarlo. Il progetto GNU preferisce il termine "free software" per motivi tracciati a http://www.gnu.org/philosophy/free-software-for-freedom.html.
I termini esatti di licenza sono definiti da questo paragrafo e dalla GNU General Public License cui si riferisce:
GNU Wget è free software; è possibile ridistribuirlo e/o modificarlo sotto i termini della GNU General Public License così come pubblicata dalla Free Software Foundation; è valida la versione 2 della licenza, o (a scelta) una qualsiasi versione più recente.
GNU Wget è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza inoltre la garanzia implicita di VENDIBILITà o di ADEGUATEZA A UN PARTICOLARE SCOPO. Si consulti la GNU General Public License per dettagli.
Una copia della GNU General Public License è inclusa come parte di questo manuale; se non è stata ricevuta, si scriva alla Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
In aggiunta a ciò, questo manuale è libero nello stesso senso:
È garantito il permesso di copiare, distribuire e/o modificare questo documento sotto i termini della GNU Free Documentation License, Versione 1.1 o superiori pubblicata dalla Free Software Foundation; le sezioni invarianti sono "GNU General Public License" e "GNU Free Documentation License", senza testi di frontespizio o di copertina posteriore. Una copia della licenza è inclusa nella sezione intitolata "GNU Free Documentation License".
I testi completi della GNU General Public License e della GNU Free
Documentation License sono disponibili qui sotto.
NdT: ritengo corretto non tradurre i testi delle due licenze, in quanto nella
traduzione, pur riuscendo a mantenere corretto il senso, potrei usare
inavvertitamente termini legalmente non adeguati, che potrebbero invalidare o
comunque rendere la traduzione non rispondente alla licenza originale.
Non ne sono sicuro, ma ritengo probabile l'esistenza di una versione tradotta
correttamente in Italiano delle due licenze. Eventualmente, se necessario, il
miglior consiglio che mi sento di dare al lettore è di rivolgersi direttamente
al GNU o alla Free Software Foundation. Non essendo esperto di termini legali,
ma solo uno studente di Ingegneria, posso occuparmi di tutta la tecnica di
questo mondo, ma non datemi un testo di legge :-).
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
NO WARRANTY
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
one line to give the program's name and an idea of what it does. Copyright (C) 19yy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
Version 1.1, March 2000
Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. A copy of the license is included in the section entitled "GNU Free Documentation License".
If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being list"; likewise for Back-Cover Texts.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
This document was generated on 8 March 2002 using the texi2html translator version 1.51.