Próbuję użyć Wget do pobrania strony, ale nie mogę przejść przez ekran logowania.
Jak wysłać nazwę użytkownika / hasło za pomocą danych pocztowych na stronie logowania, a następnie pobrać rzeczywistą stronę jako uwierzytelniony użytkownik?
Próbuję użyć Wget do pobrania strony, ale nie mogę przejść przez ekran logowania.
Jak wysłać nazwę użytkownika / hasło za pomocą danych pocztowych na stronie logowania, a następnie pobrać rzeczywistą stronę jako uwierzytelniony użytkownik?
Odpowiedzi:
Na podstawie strony podręcznika:
# Log in to the server. This only needs to be done once.
wget --save-cookies cookies.txt \
--keep-session-cookies \
--post-data 'user=foo&password=bar' \
--delete-after \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
http://server.com/interesting/article.php
Upewnij się, że --post-data
parametr jest poprawnie zakodowany procentowo (szczególnie ampersands!), W przeciwnym razie żądanie prawdopodobnie się nie powiedzie. Upewnij się także, że user
i password
są poprawne klucze; możesz znaleźć poprawne klucze, przesuwając kod HTML strony logowania (zajrzyj do funkcji przeglądarki „sprawdź element” i znajdź name
atrybut w polach nazwy użytkownika i hasła).
-p
( --page-requisites
).
--delete-after
do pierwszego wyszukiwania, aby nie zapisać strony wyników z logowania.
WGET64: missing URL
Umieściłem całą komendę wget w jednym wierszu i usunąłem `\ '
Jeśli potrzebujesz go jednorazowo, możesz zalogować się przez przeglądarkę i skopiować potrzebne nagłówki:
Użyj „Kopiuj jako cURL” na karcie Sieć w Narzędziach programisty (przeładuj stronę po otwarciu) i zamień flagę nagłówka curl -H
oraz na --data
wget --header
i --post-data
.
wget
przy prawidłowym pliku cookie nie; Podejrzewam, że usługa sieci Web sprawdza wiele różnych nagłówków GET, nawet pozornie nieistotnych, takich jak „User-Agent” lub „Cache-Control”.
wget
podałem dane w niewłaściwy sposób.
Bezpośrednio podałem pliki cookie istniejącego połączenia do wget z --no-cookies i nagłówkiem żądania HTTP Cookie. W moim przypadku było to logowanie do uniwersytetu Moodle, gdzie logowanie wygląda na bardziej złożone (przy użyciu wielu żądań z biletem logowania). Dodałem --post-data, ponieważ było to żądanie POST. Na przykład pobierz listę wszystkich użytkowników Moodle:
wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php
Miałem ten sam problem. Moim rozwiązaniem było zalogowanie się przez Chrome i zapisanie danych cookie w pliku tekstowym. Można to łatwo zrobić za pomocą tego rozszerzenia Chrome : rozszerzenie eksportu cookie.txt Chrome .
Kiedy otrzymujesz dane o ciasteczkach, istnieje również przykład, jak ich używać z wget. Udostępniono Ci prosty wiersz polecenia kopiuj-wklej.
Chciałem liniowca, który nie pobierał żadnych plików; Oto przykład potokowania wyjścia pliku cookie do następnego żądania. Testowałem tylko następujące elementy na Gentoo, ale powinno działać w większości środowisk * nix:
wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page'
(jest to jedna linia, choć prawdopodobnie zawija się w przeglądarce)
Jeśli chcesz zapisać dane wyjściowe w pliku, zmień -O -
na-O /some/file/name
Jeśli używają podstawowego uwierzytelnienia:
wget http://username:password@www.domain.com/page.html
Jeśli używają danych formularza POST, musisz zamiast tego użyć czegoś takiego jak cURL .
Uwaga: Lynx musiał zostać skompilowany z flagą --enable-persistent-cookies, aby to zadziałało
Jeśli chcesz użyć wget do pobrania pliku ze strony, która wymaga zalogowania, wystarczy plik cookie. Aby wygenerować plik cookie, wybieram ryś. Lynx to tekstowa przeglądarka internetowa. Najpierw potrzebujesz pliku konfiguracyjnego dla rysia, aby zapisać plik cookie. Utwórz plik lynx.cfg. Zapisz te konfiguracje w pliku.
SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file
Następnie uruchom rysia za pomocą tego polecenia:
lynx -cfg=lynx.cfg http://the.site.com/login
Po wprowadzeniu nazwy użytkownika i hasła oraz wybraniu opcji „zachowaj mnie na tym komputerze” lub czegoś podobnego. Jeśli logowanie się powiedzie, zobaczysz piękną tekstową stronę internetową witryny. I wylogowujesz się. W bieżącym katalogu znajdziesz plik cookie o nazwie cookie.file. Właśnie tego potrzebujemy dla wget.
Następnie wget może pobrać plik z witryny za pomocą tego polecenia.
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
Przykład do pobrania za pomocą wget na serwerze linku do dużego pliku, który można uzyskać w przeglądarce.
Na przykład za pomocą Google Chrome.
Zaloguj się tam, gdzie potrzebujesz i naciśnij pobierz. Idź, aby pobrać i skopiować link.
Następnie otwórz DevTools na stronie, na której logujesz się, przejdź do konsoli i pobierz pliki cookie, wprowadzającdocument.cookie
Teraz przejdź do serwera i pobierz plik: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>