Unikanie ciągów zapytań za pomocą wget --mirror

15

Używam wget --mirror --html-extension --convert-linksdo tworzenia kopii lustrzanej witryny, ale kończę na wielu nazwach plików w tym formacie post.php?id=#.html. Gdy próbuję wyświetlić je w przeglądarce, kończy się to niepowodzeniem, ponieważ przeglądarka ignoruje ciąg zapytania podczas ładowania pliku. Czy jest jakiś sposób na zastąpienie ?znaku w nazwach plików czymś innym?


Odpowiedź --restrict-file-names=windowsdziałała poprawnie. W połączeniu z flagami --convert-linksi --adjust-extension/ -E(poprzednio nazwanymi --html-extension, które również działają, ale są przestarzałe) tworzy lustro, które zachowuje się zgodnie z oczekiwaniami.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
wpis nielegalnie skradziony przez Stack
źródło

Odpowiedzi:

16

Zobacz --restrict-file-namesopcję. Chociaż nie jest to dokładnie przeznaczone do tego konkretnego celu, --restrict-file-names=windowsprawdopodobnie pomoże ci:

--restrict-file-names = tryby

Zmień, które znaki znajdujące się w zdalnych adresach URL muszą być poprzedzane znakami ucieczki podczas generowania lokalnych nazw plików. [...]

Gdy podano „windows”, Wget ucieka od znaków \, |, /,:,?, ", *, <,> Oraz znaków kontrolnych w zakresie 0--31 i 128--159. , Wget w trybie Windows używa + zamiast: do oddzielenia hosta i portu w lokalnych nazwach plików i używa @ zamiast? Do oddzielenia części zapytania nazwy pliku od reszty. Dlatego adres URL, który zostałby zapisany jako www. xemacs.org:4300/search.pl?input=blah w trybie Unix zostanie zapisany jako www.xemacs.org+4300/search.pl@input=blah w trybie Windows.

peth
źródło
2

Twoja przeglądarka sprawdzi się dobrze, jeśli użyjesz takiego adresu URL

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

zamiast

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

Uwaga: jeśli masz problemy z wewnętrznymi linkami z pobranych plików, przyczyną może być to, że zakończyłeś wget przed zakończeniem pobierania. Ponieważ podałeś --convert-links i --html-extension (ma zastosowanie tylko wtedy, gdy są podane), wget normalnie naprawiłby linki, aby używały% 3F zamiast?; robi to jednak na końcu, po zakończeniu pobierania; jeśli zostało przerwane, nie naprawi żadnego z linków, a ty zostaniesz w takiej sytuacji. Oczywiście zawsze możesz napisać skrypt, aby przejść i naprawić linki, ale ...

Micah Cowan
źródło
nie jest to do końca poprawne, wget, bez żadnych zakłóceń, ponieważ taki adres URL http://site.com/article.cgi?25zostanie zapisany, jak article.cgi?25.htmlpatrz sekcja 2.7 na gnu.org/software/wget/manual/wget.html#HTTP-Opcje
Tzury Bar Yochay
-2

wget nie ma opcji modyfikacji zapisanej nazwy. Co prawdopodobnie będziesz musiał zrobić, to utworzyć skrypt, który przejdzie i zastąpi? z _ lub czymś podobnym. Sam Wget nie może tego zrobić.

8BitsOfGeek
źródło