Як я можу використовувати інструмент командного рядка, наприклад Wget, для входу на сайт OpenID?


10

Зокрема, я хотів би мати можливість завантажувати певні сторінки зі свого профілю користувача на різні сайти Stack Exchange. Однак я хотів би зробити це автоматично (використовуючи cronзавдання), з командного рядка та в прохідному форматі. Я дуже вважаю за краще використовувати для цього Linux, але я можу отримати доступ до машини Mac чи Windows, якщо це необхідно.

В ідеалі я хотів би використати такий інструмент, як Wget або CURL для отримання сторінок. Я не знаю, як обійти журнал. Я бачив пропозиції, в яких згадується, що ви можете увійти через Firefox, експортувати відповідне cookie та імпортувати його в Wget через його --load-cookiesпараметр. Наприклад тут і тут . Хоча це працює, якщо я щойно увійшов, він через деякий час не працює. Я думаю, тому що маркер ID повинен бути оновлений.

Отже, лише після входу в SU та експорту файлів cookie я можу:

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

Через кілька хвилин я отримую помилку 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.

Отже, як я можу автоматично увійти на веб-сайт із підтримкою OpenID з командного рядка?


PS. Я думаю, що це краще підходить тут, ніж для веб-додатків, оскільки моє запитання стосується аспекту командного рядка, а не фактичних деталей веб-сторінки, про яку йдеться. Я б припустив, що будь-яке рішення буде застосовне до всіх OpenID- сайтів.


3
Ви заглянули в API SE ( api.stackexchange.com ), щоб побачити, чи надає він інформацію, яку шукаєте? Це офіційний спосіб отримати програмний доступ до даних, і він використовує OAuth для аутентифікації.
важкий

@heavyd Так, я якось сподівався, що мені не доведеться заглиблюватися в API для цього. Якщо це єдиний спосіб, я думаю, мені доведеться. З короткого погляду, схоже , я не можу автоматизувати процес входу через API. Чи знаєте ви, чи можу я здійснити автентифікацію таким чином, щоб не вимагати від мене активного введення? Якщо я правильно розумію документи, щоб отримати дані, для яких потрібна автентифікація, мені потрібно буде ввійти вручну.
terdon

Я фактично не використовував API API, але в інших реалізаціях OAuth я використовував вас, коли ви входили один раз, і ви отримуєте маркер, який є хорошим на невизначений термін.
важкий

Відповіді:


1

Ви не можете, тому що cookies оновлюються кожен так часто. Це в цілях безпеки, єдиний спосіб, яким ви могли це зробити, - це вже так, як ви це зробили. як мінімум, з мого розуміння.


Я щойно побачив це справді старе питання .... На жаль.
Маартен

-3

(Пере-) Прочитайте сторінку man wgetі перегляньте описи для --userта --passwordпрапорів.

Зауважте, що передавати пароль як аргумент командного рядка не рекомендується, оскільки його psможе бачити кожен, хто працює . Найкраща практика - нікуди не зберігати необроблені паролі, але наступне найкраще - це помістити його у файл, який може читати лише власник.


3
Прапорці, які ви згадуєте, призначені для аутентифікації на основі HTTP (базовий, дайджест тощо). SE не використовує жодного з них для аутентифікації. Вони покладаються на стороннього постачальника OpenID для аутентифікації.
важкий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.