Как я могу использовать инструмент командной строки, такой как Wget, для входа на сайт OpenID?


10

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

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

Итак, сразу после входа в SU и экспорта моих куки я могу сделать:

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
Вы заглянули в SE API ( api.stackexchange.com ), чтобы узнать, предоставляет ли он информацию, которую вы ищете? Это официальный способ получить программный доступ к данным, и он использует OAuth для аутентификации.
тяжело

@heavyd да, я надеялся, что для этого не нужно будет углубляться в API. Если это единственный способ, я думаю, мне придется. На первый взгляд кажется, что я не могу автоматизировать процесс входа в систему через API. Вы знаете, могу ли я пройти аутентификацию таким образом, чтобы от меня не требовалось активного участия? Если я правильно понимаю документы, чтобы получить данные, требующие аутентификации, мне нужно будет войти в систему вручную.
terdon

Я на самом деле не использовал SE API, но в других реализациях OAuth я использовал ваш логин один раз, и вы получили токен, который хорош до бесконечности.
тяжело

Ответы:


1

Вы не можете, потому что Cookies обновляются очень часто. Это в целях безопасности. Единственный способ, которым вы можете это сделать, - это то, что вы уже сделали. по крайней мере, из моего понимания.


Я только что увидел, что это действительно старый вопрос .... Упс.
Мартен

-3

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

Обратите внимание, что передача пароля в качестве аргумента командной строки не рекомендуется, так как любой, кто работает, psможет увидеть его. Лучше всего не сохранять сырые пароли в любом месте, но лучше всего поместить их в файл, который может прочитать только владелец.


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