Jak mogę użyć narzędzia wiersza polecenia, takiego jak Wget, aby zalogować się na stronie OpenID?

10

W szczególności chciałbym móc pobierać określone strony z mojego profilu użytkownika na różnych stronach Stack Exchange. Chciałbym jednak to zrobić automatycznie (przy użyciu cronzadania), z wiersza polecenia i w formacie możliwym do przetworzenia. Wolę używać do tego Linuksa, ale w razie potrzeby mogę uzyskać dostęp do komputera Mac lub Windows.

Idealnie chciałbym użyć narzędzia takiego jak Wget lub cURL, aby pobrać strony. Nie wiem jednak, jak przejść obok logowania. Widziałem sugestie, które wspominają, że możesz zalogować się przez Firefox, wyeksportować odpowiedni plik cookie i zaimportować go do Wget za pomocą jego --load-cookiesopcji. Na przykład tutaj i tutaj . Chociaż działa to, jeśli właśnie się zalogowałem, po pewnym czasie nie działa. Chyba dlatego, że token ID musi zostać odświeżony.

Tak więc zaraz po zalogowaniu się do SU i wyeksportowaniu plików cookie mogę:

wget --load-cookies cookies.txt \
  https://superuser.com/users/151431/terdon?tab=responses

Po kilku minutach pojawia się błąd 404:

wget -O ~/stack/$(date +%s) --load-cookies ~/cookies.txt \
   https://superuser.com/users/151431/terdon?tab=responses

--2013-08-06 04:04:14--  https://superuser.com/users/151431/terdon?tab=responses
Resolving superuser.com (superuser.com)... 198.252.206.16
Connecting to superuser.com (superuser.com)|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-06 04:04:15 ERROR 404: Not Found.

Jak więc mogę automatycznie zalogować się do strony internetowej obsługującej OpenID z wiersza poleceń?


PS. Myślę, że jest to bardziej odpowiednie tutaj niż w aplikacjach internetowych, ponieważ moje pytanie naprawdę dotyczy aspektu wiersza poleceń, a nie faktycznych szczegółów danej strony internetowej. Domyślam się, że każde rozwiązanie będzie miało zastosowanie do wszystkich witryn OpenID .

terdon
źródło
3
Czy sprawdziłeś interfejs API SE ( api.stackexchange.com ), aby sprawdzić, czy zawiera on informacje, których szukasz? Jest to oficjalny sposób uzyskania programowego dostępu do danych i do uwierzytelnienia wykorzystuje OAuth.
heavyd
@ heavyd tak, miałem trochę nadziei, że nie będę musiał zagłębiać się w API w tym celu. Jeśli to jedyny sposób, myślę, że będę musiał. Z pobieżnego spojrzenia nie wygląda na to, żebym mógł zautomatyzować proces logowania za pośrednictwem interfejsu API. Czy wiesz, czy mogę dokonać uwierzytelnienia w sposób, który nie wymaga ode mnie aktywnego wkładu? Jeśli dobrze rozumiem dokumenty, aby uzyskać dane wymagające uwierzytelnienia, będę musiał zalogować się ręcznie.
terdon
Właściwie nie korzystałem z interfejsu API SE, ale w innych implementacjach OAuth użyłem loginu raz i masz token, który jest dobry na czas nieokreślony.
heavyd

Odpowiedzi:

1

Nie możesz, ponieważ pliki cookie odświeżają się tak często. Jest to ze względów bezpieczeństwa, jedynym sposobem, aby to zrobić, jest to, co już zrobiłeś. przynajmniej z mojego zrozumienia.

Maarten
źródło
Właśnie widziałem, że to naprawdę stare pytanie ... Ups.
Maarten
-3

(Re-) Przeczytaj stronę podręcznika użytkownika wgeti spójrz na opisy flag --useri --password.

Pamiętaj, że przekazanie hasła jako argumentu wiersza poleceń nie jest zalecane, ponieważ każdy, kto go uruchomił, psmoże go zobaczyć. Najlepszą praktyką jest, aby nigdzie nie zapisywać surowych haseł, ale następną najlepszą jest umieszczenie go w pliku, który może odczytać tylko właściciel.

Jeff N.
źródło
3
Wspomniane flagi dotyczą uwierzytelniania opartego na HTTP (podstawowe, podsumowanie itp.). SE nie wykorzystuje żadnego z nich do uwierzytelnienia. Uwierzytelniają się przy użyciu zewnętrznego dostawcy OpenID .
heavyd