15 votes

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

J'utilise wget --mirror --html-extension --convert-links pour refléter 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, l'opération échoue, car le navigateur ignore la chaîne de requête lors du chargement du fichier. Existe-t-il un moyen de remplacer la chaîne de requête ? dans les noms de fichiers avec quelque chose d'autre ?


La réponse de --restrict-file-names=windows a fonctionné correctement. En liaison avec les drapeaux --convert-links y --adjust-extension / -E (anciennement dénommée --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

16voto

peth Points 9170

Voir le --restrict-file-names option. Bien qu'elle ne soit pas exactement destinée à cet usage particulier, --restrict-file-names=windows vous aidera probablement :

--restrict-file-names=modes

Modifier 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 outre, 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 sous la forme www.xemacs.org:4300/search.pl?input=blah en mode Unix serait enregistrée sous la forme www.xemacs.org+4300/search.pl@input=blah en mode Windows.

1voto

Wes Hardaker Points 774

Votre navigateur l'affichera correctement si vous utilisez une URL telle que

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

au lieu de

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

Note : si vous avez des problèmes avec les liens internes des fichiers téléchargés, c'est parce que vous avez arrêté wget avant qu'il n'ait terminé le téléchargement. Puisque vous avez spécifié --convert-links et --html-extension (qui ne s'applique que lorsque ces options sont données), wget devrait normalement corriger les liens pour utiliser %3F au lieu de ? ; cependant, il le fait à la fin, après avoir terminé le téléchargement ; s'il a été interrompu, il n'aura corrigé aucun des liens, et vous vous retrouverez dans cette situation difficile. Bien sûr, vous pouvez toujours écrire un script pour passer en revue et corriger les liens, mais...

-2voto

JustXanny Points 1764

Wget n'a pas d'option pour modifier le nom sauvegardé. Vous devrez probablement créer un script pour remplacer ? par _ ou quelque chose de similaire. Wget seul ne peut pas faire cela.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X