Échapper des chaînes de requête avec wget --mirror

15

J'utilise wget --mirror --html-extension --convert-linkspour mettre en miroir un site, mais je me retrouve avec beaucoup de noms de fichiers au format post.php?id=#.html. Lorsque j'essaie de les afficher dans un navigateur, cela échoue, car le navigateur ignore la chaîne de requête lors du chargement du fichier. Existe-t-il un moyen de remplacer le ?caractère dans les noms de fichiers par autre chose?


La réponse de a --restrict-file-names=windowsfonctionné correctement. En conjonction avec les drapeaux --convert-linkset --adjust-extension/ -E(anciennement nommé --html-extension, qui fonctionne également mais est obsolète), il produit un miroir qui se comporte comme prévu.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
poste illégalement volé par Stack
la source

Réponses:

16

Voir l' --restrict-file-namesoption. Bien qu'il ne soit pas exactement destiné à cet usage particulier, --restrict-file-names=windowsil vous aidera probablement:

--restrict-file-names = modes

Modifiez les caractères trouvés dans les URL distantes qui doivent être échappés lors de la génération des noms de fichiers locaux. [...]

Lorsque "windows" est indiqué, Wget échappe les caractères \, |, /,:,?, ", *, <,> Et les caractères de contrôle dans les plages 0--31 et 128--159. En plus de cela , Wget en mode Windows utilise + au lieu de: pour séparer l'hôte et le port dans les noms de fichiers locaux, et utilise @ au lieu de? Pour séparer la partie requête du nom de fichier du reste. Par conséquent, une URL qui serait enregistrée en tant que www. xemacs.org:4300/search.pl?input=blah en mode Unix serait enregistré sous www.xemacs.org+4300/search.pl@input=blah en mode Windows.

peth
la source
2

Votre navigateur le verra bien si vous utilisez une URL comme

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

au lieu de

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

Remarque: si vous rencontrez des problèmes avec les liens internes des fichiers téléchargés, ce serait parce que vous avez terminé wget avant de terminer le téléchargement. Puisque vous avez spécifié --convert-links et --html-extension (ne s'applique que lorsque ceux-ci sont fournis), wget devrait normalement corriger les liens pour utiliser% 3F au lieu de?; cependant, il le fait à la fin, une fois le téléchargement terminé; s'il a été interrompu, il n'aura corrigé aucun des liens, et vous vous retrouvez dans cette situation difficile. Bien sûr, vous pouvez toujours écrire un script pour parcourir et corriger les liens, mais ...

Micah Cowan
la source
ce n'est pas tout à fait correct, wget, sans interruption, car une URL comme celle- http://site.com/article.cgi?25ci sera enregistrée comme article.cgi?25.htmlvoir la section 2.7 sur gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay
-2

wget n'a pas d'option pour modifier le nom enregistré. Ce que vous devrez probablement faire est de créer un script à parcourir et à remplacer? avec _ ou quelque chose de similaire. Wget seul ne peut pas faire cela.

8BitsOfGeek
la source