CURL, aby uzyskać dostęp do strony, która wymaga logowania z innej strony

Mam 2 Strony: xyz.com/a i xyz.com/b. Dostęp do xyz.com/b Mogę uzyskać tylko wtedy, gdy najpierw zaloguję się do xyz.com/a. Jeśli uzyskasz dostęp do xyz.com/b bez przechodzenia przez inne, po prostu dostaję odmowę dostępu (brak przekierowania do logowania) przez przeglądarkę. Po zalogowaniu się w xyz.com/a, Mogę uzyskać dostęp do drugiego.

Moim problemem jest zrobienie tego za pomocą polecenia curl. Mogę zalogować się pomyślnie do xyz.com/a za pomocą curl, ale potem spróbuj {[8] } i uzyskam odmowę dostępu.

Używam:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

I ' ve próbowałem użyć drugiej linii z & bez części użytkownik / hasło i nadal nie działa. Obie strony używają tego samego CA, więc to nie problem. Jakieś sugestie? Dzięki

Author: Mechanical snail, 2012-09-13

4 answers

Strona internetowa prawdopodobnie używa plików cookie do przechowywania informacji o sesji. When you run

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curl jest prowadzony dwukrotnie, w dwóch oddzielnych sesjach. Tak więc po uruchomieniu drugiego polecenia pliki cookie ustawione przez pierwsze polecenie nie są dostępne; to tak, jakbyś zalogował się do strony a w jednej sesji przeglądarki i próbował uzyskać dostęp do strony b w innej.

To, co musisz zrobić, to zapisać Pliki cookie utworzone przez pierwsze polecenie:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

A następnie przeczytaj je z powrotem podczas uruchamiania drugiego:

curl --cookie ./somefile https://xyz.com/b

Alternatywnie możesz spróbować pobrać oba pliki za pomocą tego samego polecenia, które myślę, że użyje tych samych plików cookie.

 151
Author: Mechanical snail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-13 03:53:18

Możesz również zalogować się przez przeglądarkę i uzyskać polecenie ze wszystkimi nagłówkami, w tym Plikami cookie:

Otwórz zakładkę Sieć narzędzi programistycznych, Zaloguj się, Przejdź do potrzebnej strony, użyj "Kopiuj jako cURL".

zrzut ekranu

 135
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 16:30:14

Po jakimś googlowaniu znalazłem to:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b
Nie mam pojęcia, czy to zadziała, ale może cię to poprowadzić we właściwym kierunku.
 52
Author: Joe Mills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-13 03:45:52

Moja odpowiedź to mod kilku wcześniejszych odpowiedzi od @ JoeMills i @user.

  1. Pobierz cURL polecenie logowania do serwera:

    • załaduj stronę logowania dla strony internetowej i otwórz Panel sieci narzędzi programistycznych
      • w Firefoksie kliknij prawym przyciskiem myszy stronę, wybierz "Inspect Element (Q)" i kliknij kartę Sieć
    • przejdź do formularza logowania, wpisz nazwę użytkownika, hasło i zaloguj się
    • po zalogowaniu wróć do Panelu sieci i przewiń do góry, aby znaleźć POST wejście. Kliknij prawym przyciskiem myszy i wybierz Kopiuj -> Kopiuj jako CURL
    • Wklej to do edytora tekstu i spróbuj tego w wierszu polecenia, aby sprawdzić, czy to działa
      • możliwe, że niektóre witryny mają hartowanie, które zablokuje tego typu spoofing logowania, który wymagałby więcej kroków poniżej, aby ominąć.
  2. Zmodyfikuj polecenie cURL, aby móc zapisać plik cookie sesji po zalogowaniu

    • Usuń wpis -H 'Cookie: <somestuff>'
    • Dodaj po curl na początku -c login_cookie.txt
    • spróbuj uruchomić zaktualizowaną komendę curl, a otrzymasz nowy plik 'login_cookie.txt' w tym samym folderze
  3. Wywołanie nowej strony internetowej przy użyciu tego nowego pliku cookie, który wymaga zalogowania się

    • curl -b login_cookie.txt <url_that_requires_log_in>

Próbowałem tego na Ubuntu 20.04 i działa jak urok.

 0
Author: Timothy C. Quinn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-15 19:05:39