Jak używać wget / curl do pobierania ze strony, na której jestem zalogowany?

46

Niektóre części wikipedii wyglądają inaczej po zalogowaniu. Chciałbym zaprosić strony użytkowników, aby wyglądały tak, jakbym był zalogowany.

Czy istnieje sposób, aby wget takie strony użytkownika?

http://en.wikipedia.org/wiki/User:A

to jest strona logowania:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
użytkownik784637
źródło
Zobacz stackoverflow.com/a/21919431/1136018, aby uzyskać łatwe rozwiązanie za pomocą Google Chrome + cURL
pterojacktyl

Odpowiedzi:

50

Prosty sposób: zaloguj się w przeglądarce i przekaż ciasteczka do wget

Najłatwiejsza metoda: ogólnie rzecz biorąc, musisz dostarczyć wget lub curl z (zalogowanymi) ciasteczkami z określonej witryny, aby mogły pobierać strony tak, jakbyś był zalogowany .

Jeśli używasz przeglądarki Firefox, łatwo to zrobić za pomocą dodatku Eksportuj pliki cookie . Zainstaluj dodatek i:

  1. Przejdź do Narzędzia ... Eksportuj pliki cookie i zapisz cookies.txtplik (możesz zmienić nazwę pliku / miejsce docelowe).
  2. Otwórz terminal i użyj wgetz --load-cookies=FILENAMEopcją, np

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Do zwijania sięcurl --cookie cookies.txt ...

(Spróbuję zaktualizować tę odpowiedź dla użytkowników Chrome / Chromium)

Trudny sposób: użyj curl (najlepiej) lub wget do zarządzania całą sesją

  • Szczegółowy poradnik wykracza poza zakres tej odpowiedzi, ale używasz curl z opcją --cookie-jarlub wget z --save-cookies --keep-session-cookiesopcjami, wraz z metodą HTTP / S PUT, aby zalogować się na stronie, zapisać pliki cookie logowania, a następnie użyć ich do symulować przeglądarkę.
  • Nie trzeba dodawać, że wymaga to przejrzenia źródła HTML strony logowania (uzyskania nazw pól wejściowych itp.) I często trudno jest pracować dla stron używających czegokolwiek poza prostym uwierzytelnianiem loginu / hasła.
  • Wskazówka: jeśli wybierzesz tę trasę, często znacznie łatwiej jest poradzić sobie z mobilną wersją strony internetowej (jeśli jest dostępna), przynajmniej na etapie uwierzytelnienia.
ish
źródło
1
Dobra wskazówka. Kod witryny mobilnej jest często znacznie bardziej przejrzysty.
CousinCocaine
4
jak wygląda taki plik cookie.txt?
Frederick Nord,
Ten dodatek „Eksportuj pliki cookie” utworzył plik cookie z plikami cookie dla każdej witryny, do której uzyskałem dostęp w przeglądarce Firefox. Więc jeśli zastosujesz się do tej odpowiedzi, będziesz prezentować wszystkie swoje pliki cookie na dowolnej odwiedzanej stronie. W tej odpowiedzi uważam to za lukę w zabezpieczeniach. Możesz łatwo obejść ten problem, używając: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers
Możesz użyć dodatku Cookie Manager w Firefoksie, aby eksportować tylko wybrane pliki cookie.
Hans Ginzel,
7

Kolejne łatwe rozwiązanie, które działało dla mnie bez instalowania żadnych dodatkowych elementów:

To da ci polecenie, które możesz wkleić bezpośrednio do powłoki, która ma wszystkie dane uwierzytelniające, np

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Następnie możesz zmodyfikować adres URL w poleceniu, aby pobrać cokolwiek chcesz.

BlackShift
źródło
4

Dzięki cURL obsługa plików cookie na dwa sposoby jest naprawdę łatwa.

curl www.target-url.com -c cookie.txtnastępnie zapisze plik o nazwie cookie.txt. Ale musisz się zalogować, więc trzeba używać --data z argumentami takich jak: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Po uzyskaniu zalogowanego pliku cookie możesz wysłać go za pomocą: curl www.target-url.com/?user-page.php -b cookie.txt

Wystarczy użyć -c (--cookie) lub -b (--cookie-jar), aby zapisać i wysłać.

Uwaga 1: Korzystanie z cURL CLI jest dużo łatwiejsze niż PHP i może szybsze;)

Aby zapisać końcową zawartość, możesz łatwo dodać > filename.htmldo polecenia cURL, a następnie zapisać pełny kod HTML.

Uwaga 2 na temat „pełnego”: nie można renderować javascript za pomocą cURL, wystarczy pobrać kod źródłowy.

erm3nda
źródło
1
-Xparametr oznacza „do post”, ale użycie --data=xxx -Xjest niejawne, więc na pewno możesz je usunąć.
erm3nda
-bjestread cookie
Timo
3

Dla tych, którzy nadal są zainteresowani tymi pytaniami, istnieje bardzo przydatne rozszerzenie Chrome o nazwie CurlWGet, które pozwala wygenerować żądanie wget/ curlze środkami uwierzytelniającymi itp. Za pomocą jednego kliknięcia. Aby zainstalować to rozszerzenie, wykonaj następujące czynności:

  1. Zainstaluj rozszerzenie ze sklepu internetowego Chrome .
  2. Przejdź na stronę internetową, którą chcesz pobrać.
  3. Rozpocznij pobieranie.
  4. Rozszerzenie wygeneruje dla Ciebie link.

Cieszyć się!

jehon
źródło
2

Wpis na blogu Wget with Firefox Cookies pokazuje, jak uzyskać dostęp do pliku danych sqlite, w którym Firefox przechowuje swoje pliki cookie. W ten sposób nie trzeba ręcznie eksportować plików cookie do użycia z wget. Komentarz sugeruje, że nie działa z sesyjnymi plikami cookie, ale działał dobrze w witrynach, z którymi próbowałem.

Falko Menge
źródło
2

spójrz na cliget dla Firefoksa.

Kiedy masz zamiar pobrać, w ostatnim oknie dialogowym pobierania pojawi się opcja skopiowania pliku do schowka jako curl.

weberjn
źródło
1

Próbowałeś tego?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
źródło
tak - niestety to nie zadziałało = (
user784637
6
Uwaga: ta składnia działa tylko w przypadku podstawowego uwierzytelniania HTTP (w przeglądarce pojawia się specjalne okno dialogowe Nazwa użytkownika / Hasło), a nie w przypadku uwierzytelniania opartego na stronie internetowej.
ish
podstawowym adresem URL uwierzytelniania HTTP jest admin: [email protected], ale jak powiedział @izx, podstawowy HTTP to funkcja przeglądarki, a nie programowanie w PHP ani kod. Jeśli któregoś dnia potrzebujesz uzyskać dostęp do adresu chronionego htaccess, możesz użyć tego trybu; D
erm3nda
Nie głosowałem za odrzuceniem, ale nie jest to dobry sposób na uwierzytelnienie: jeśli przez przypadek upublicznisz takie skrypty, ludzie będą mogli użyć Twojego hasła.
Willem Van Onsem,
1
O co chodzi z opiniami? Może nie być odpowiedzią typu catch-all, ale nadal odpowiedzią.
Overcode
1

Wypróbuj coś takiego:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Zobacz także ten link:

Jak pobrać tę stronę za pomocą wget?

kenorb
źródło
Tak jak każde wyjście. Użyj, > filename.htmlaby zapisać dane wyjściowe w bieżącym katalogu lub umieścić pełną ścieżkę do pliku. Dotyczy to zarówno systemów Linux, jak i Windows.
erm3nda
Widzę więc, że wget ma wiele funkcji, takich jak cURL lub viceversa. Może wykonywać POST, więc może logować się na stronach internetowych. Ciekawy.
erm3nda
1

W przypadku bardziej skomplikowanych loginów opartych na witrynach internetowych należy również rozważyć użycie skryptu Python i modułu imitującego przeglądarkę, takiego jak http://wwwsearch.sourceforge.net/mechanize/ zamiast curllub wget.

W ten sposób sesyjne pliki cookie są obsługiwane automatycznie, możesz podążać za linkami i wypełniać formularze logowania, a zatem „skryptować” się przez proces logowania, jakbyś korzystał z przeglądarki internetowej.

StW
źródło
Tak, użycie mechanizacji może być naprawdę fajne. Również (i pierwotnie) dostępny w Perlu, jeśli to więcej twoja filiżanka herbaty.
andol