2012-09-13 12 views
66

Mam 2 strony: xyz.com/a i xyz.com/b. Mogę uzyskać dostęp tylko do xyz.com/b wtedy i tylko wtedy, gdy najpierw zaloguję się na xyz.com/a. Jeśli uzyskuję dostęp do xyz.com/b bez przechodzenia przez drugą, po prostu uzyskuję odmowę dostępu (brak przekierowania do logowania) przez przeglądarkę. Po zalogowaniu się pod adresem xyz.com/a mogę uzyskać dostęp do drugiego.CURL, aby uzyskać dostęp do strony wymagającej logowania z innej strony

Mój problem polega na tym, używając polecenia curl. Mogę zalogować się z powodzeniem do xyz.com/a używając curl, ale potem spróbuj xyx.com/b i otrzymam odmowę dostępu.

używam następujące:

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

Próbowałem przy użyciu drugą linię z & bez części użytkownik/hasło i nadal nie działa. Obie strony używają tego samego urzędu certyfikacji, więc nie stanowi to problemu. Jakieś sugestie? Dzięki

Odpowiedz

81

Strona internetowa prawdopodobnie używa cookies do przechowywania informacji o sesji. Po uruchomieniu jest uruchamiana dwukrotnie, w dwóch osobnych sesjach, po wykonaniu dwukrotnego uruchomienia. Tak więc, gdy uruchomione jest drugie polecenie, pliki cookie ustawione przez 1. polecenie są niedostępne; jest tak, jakbyś zalogował się na stronie a w jednej sesji przeglądarki i próbował uzyskać dostęp do strony b w innej.

Co trzeba zrobić, to Zapisz ciasteczka utworzone przez pierwszego polecenia:

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

a następnie odczytać je z powrotem, gdy uruchomiony drugi:

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

Alternatywnie można spróbować pobieranie obu plików w tym samym poleceniu, które moim zdaniem wykorzystają te same pliki cookie.

+0

To jest dziwne, ponieważ kiedy próbuję tego, to nie działa, ponieważ plik cookie przechowywany w 'somefile' zawiera parametr ścieżki ('/a' w tym przypadku) i nie jest przekazywany do drugiego połączenia. Jeśli edytuję plik cookie w pliku i umieszczam tylko slash, działa (ciasteczko przekazane do drugiego połączenia).Czy wiesz, czy można zapobiec zapisywaniu ścieżki w pliku cookie? –

36

Po pewnym googling 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 działa, ale może to prowadzić Cię w dobrym kierunku.

+0

pracował bez że '-d„XXX”' tak dzięki – deadfish

+5

To będzie działać, jeśli masz stronę internetową, która spodziewa się formularz należy złożyć. Będziesz musiał spojrzeć na źródło i znaleźć obraz

i zobaczyć, jakie są nazwy pól i do jakiego adresu URL ma być wysłany. Możesz użyć debugera przeglądarki internetowej, aby wyszukać żądanie postu, aby zobaczyć, co jest wysyłane. To trochę łatwiejsze. – stonefury

+0

Dzięki @stonefury za ten komentarz - zaoszczędziłem tyle czasu na debugowanie :) – Rob1991

36

Również może chcesz zalogować się poprzez przeglądarkę i dostać polecenie ze wszystkimi nagłówkami tym ciasteczek:

Otwórz zakładkę Sieć narzędzi programistycznych, zaloguj się, przejdź do potrzebnej strony, użyj „Kopiuj jako cURL” .

screenshot

+5

To jest głęboka odpowiedź! Nie odpowiada bezpośrednio na pytanie, ponieważ pokazuje * jak * odpowiedzieć na to pytanie. – bgStack15

+2

jest to jedna z najbardziej przydatnych odpowiedzi. Pozwala naprawdę obserwować i rozumieć nawet uwierzytelnianie wielostopniowe. –

+0

proszę sprawdzić moje pytanie dotyczące tego samego problemu https://stackoverflow.com/questions/48391862/login-to-page-using-html-form-and-cookies-for- authenthentication –

Powiązane problemy