Escapar cadenas de consulta con wget --mirror

15

Estoy usando wget --mirror --html-extension --convert-linkspara reflejar un sitio, pero termino con muchos nombres de archivo en el formato post.php?id=#.html. Cuando intento verlos en un navegador, falla, porque el navegador ignora la cadena de consulta al cargar el archivo. ¿Hay alguna forma de reemplazar el ?carácter en los nombres de archivo con algo más?


La respuesta de --restrict-file-names=windowsfuncionó correctamente. Junto con las banderas --convert-linksy --adjust-extension/ -E(anteriormente llamado --html-extension, que también funciona pero está en desuso) produce un espejo que se comporta como se esperaba.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
ABANDON STACK - Jeremy Banks
fuente

Respuestas:

16

Ver la --restrict-file-namesopción Si bien no está destinado exactamente para este propósito en particular, --restrict-file-names=windowsprobablemente lo ayudará a lo largo de:

--restrict-file-names = modos

Cambie los caracteres que se encuentran en las URL remotas que se deben escapar durante la generación de nombres de archivos locales. [...]

Cuando se da "windows", Wget escapa a los caracteres \, |, /,:,?, ", *, <,> Y los caracteres de control en los rangos 0-31 y 128-159. Además de esto , Wget en modo Windows usa + en lugar de: para separar el host y el puerto en los nombres de los archivos locales, y usa @ en lugar de? Para separar la parte de consulta del nombre del archivo del resto. Por lo tanto, una URL que se guardaría como www. xemacs.org:4300/search.pl?input=blah en modo Unix se guardaría como www.xemacs.org+4300/search.pl@input=blah en modo Windows.

peth
fuente
2

Su navegador lo verá bien si usa una URL como

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

en lugar de

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

Nota: si tiene problemas con los enlaces internos de los archivos descargados, se debe a que finalizó wget antes de finalizar la descarga. Como especificó --convert-links y --html-extension (solo se aplica cuando se proporcionan), wget normalmente arreglará los enlaces para usar% 3F en lugar de? sin embargo, lo hace al final, una vez que finaliza la descarga; Si se ha interrumpido, no habrá reparado ninguno de los enlaces, y quedará en esta situación. Por supuesto, siempre puedes escribir un script para revisar y corregir los enlaces, pero ...

Micah Cowan
fuente
esto no es del todo correcto, wget, sin interrupción, para una URL como http://site.com/article.cgi?25se guardará como se article.cgi?25.htmlve en la sección 2.7 en gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay el
-2

wget no tiene una opción para modificar el nombre guardado. Lo que probablemente deba hacer es crear un script para revisar y reemplazar. con _ o algo similar. Wget solo no puede hacer esto.

8 bits de geek
fuente