Escaping delle stringhe di query con wget --mirror


15

Sto usando wget --mirror --html-extension --convert-linksper rispecchiare un sito, ma finisco con molti nomi di file nel formato post.php?id=#.html. Quando provo a visualizzarli in un browser non riesce, perché il browser ignora la stringa di query durante il caricamento del file. C'è un modo per sostituire il ?personaggio nei nomi dei file con qualcos'altro?


La risposta di ha --restrict-file-names=windowsfunzionato correttamente. In combinazione con i flag --convert-linkse --adjust-extension/ -E(precedentemente denominato --html-extension, che funziona anche ma è deprecato) produce un mirror che si comporta come previsto.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example

Risposte:


16

Vedi l' --restrict-file-namesopzione Sebbene non sia esattamente destinato a questo scopo particolare, --restrict-file-names=windowsprobabilmente ti aiuterà lungo:

--restrict-file-nomi = modalità

Modifica i caratteri trovati negli URL remoti che devono essere esclusi durante la generazione di nomi di file locali. [...]

Quando viene dato "windows", Wget sfugge ai caratteri \, |, /,:,?, ", *, <,> E ai caratteri di controllo nell'intervallo 0--31 e 128--159. Oltre a questo , Wget in modalità Windows utilizza + invece di: per separare host e porta nei nomi di file locali e utilizza @ anziché? Per separare la parte della query del nome file dal resto. Pertanto, un URL che verrebbe salvato come www. xemacs.org:4300/search.pl?input=blah in modalità Unix verrebbe salvato come www.xemacs.org+4300/search.pl@input=blah in modalità Windows.


2

Il tuo browser lo visualizzerà bene se usi un URL come

file:///tmp/example.com/post.php%3Fid=1.html

invece di

file:///tmp/example.com/post.php?id=1.html

Nota: se hai problemi con i collegamenti interni dai file scaricati, sarebbe perché hai terminato wget prima che fosse completato con il download. Dato che hai specificato --convert-links e --html-extension (si applica solo quando sono indicati), wget normalmente aggiusterà i collegamenti per usare% 3F invece di?; tuttavia, lo fa alla fine, dopo aver terminato il download; se è stato interrotto, non avrà risolto nessuno dei collegamenti e rimarrai in questa situazione. Certo, puoi sempre scrivere uno script per esaminare e correggere i collegamenti, ma ...


questo non è del tutto corretto, wget, senza interruzioni, perché un URL come http://site.com/article.cgi?25verrà salvato come article.cgi?25.htmlvedi la sezione 2.7 su gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay

-2

wget non ha un'opzione per modificare il nome salvato. Quello che probabilmente dovrai fare è creare uno script da esaminare e sostituire? con _ o qualcosa di simile. Wget da solo non può farlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.