Экранирование строк запроса с помощью wget --mirror

15

Я использую wget --mirror --html-extension --convert-linksдля зеркалирования сайта, но я получаю много имен файлов в формате post.php?id=#.html. Когда я пытаюсь просмотреть их в браузере, происходит сбой, потому что браузер игнорирует строку запроса при загрузке файла. Есть ли способ заменить ?символ в именах файлов чем-то другим?


Ответ --restrict-file-names=windowsсработал правильно. В сочетании с флагами --convert-linksи --adjust-extension/ -E(ранее названным --html-extension, который также работает, но не рекомендуется), он создает зеркало, которое ведет себя так, как ожидается.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
ABANDON STACK - Джереми Бэнкс
источник

Ответы:

16

Смотрите --restrict-file-namesвариант. Хотя он и не предназначен для этой конкретной цели, --restrict-file-names=windowsвероятно, поможет вам в следующем:

--restrict-файл-имена = режимы

Изменить, какие символы, найденные в удаленных URL, должны быть экранированы при генерации локальных имен файлов. [...]

Когда задано «windows», Wget экранирует символы \, |, /,:,?, ", *, <,> И управляющие символы в диапазонах 0--31 и 128--159. В дополнение к этому Wget в режиме Windows использует + вместо: для разделения хоста и порта в локальных именах файлов и использует @ вместо? Для отделения части имени файла с запросом, поэтому URL-адрес будет сохранен как www. xemacs.org:4300/search.pl?input=blah в режиме Unix будет сохранен как www.xemacs.org+4300/search.pl@input=blah в режиме Windows.

Peth
источник
2

Ваш браузер будет хорошо смотреться, если вы используете URL, например

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

вместо того

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

Примечание. Если у вас возникли проблемы с внутренними ссылками из загруженных файлов, это может быть связано с тем, что вы завершили работу wget до завершения загрузки. Так как вы указали --convert-links и --html-extension (применяется только тогда, когда они указаны), wget обычно исправляет ссылки для использования% 3F вместо?; тем не менее, он делает это в конце, после завершения загрузки; если он был прерван, он не исправит ни одну из ссылок, и вы останетесь в этом затруднительном положении. Конечно, вы всегда можете написать скрипт, чтобы пройти и исправить ссылки, но ...

Мика Коуэн
источник
это не совсем правильно, Wget, без перерыва, для URL - адреса , как http://site.com/article.cgi?25будет сохранен как можно article.cgi?25.htmlнайти в разделе 2.7 на gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Бар Yochay
-2

У wget нет возможности изменить сохраненное имя. Что вам, вероятно, нужно будет сделать, это создать сценарий, чтобы пройти и заменить? с _ или что-то подобное. Один только Wget не может этого сделать.

8BitsOfGeek
источник