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

1298
terdon

В частности, я хотел бы иметь возможность загружать определенные страницы из моего профиля пользователя на различных сайтах 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 .

9
Вы заглянули в SE API (https://api.stackexchange.com), чтобы узнать, предоставляет ли он информацию, которую вы ищете? Это официальный способ получить программный доступ к данным, и он использует OAuth для аутентификации. heavyd 10 лет назад 3
@heavyd Да, я надеялся, что мне не нужно будет углубляться в API для этого. Если это единственный способ, я думаю, мне придется. На первый взгляд, он [не появляется] (https://api.stackexchange.com/docs/authentication), как будто я могу автоматизировать процесс входа в систему через API, хотя. Вы знаете, могу ли я пройти аутентификацию таким образом, чтобы от меня не требовалось активного участия? Если я правильно понимаю документы, чтобы получить данные, требующие аутентификации, мне нужно будет войти в систему вручную. terdon 10 лет назад 0
Я на самом деле не использовал SE API, но в других реализациях OAuth я использовал ваш логин один раз, и вы получили токен, который хорош до бесконечности. heavyd 10 лет назад 0

2 ответа на вопрос

1
Maarten

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

Я только что увидел, что это действительно старый вопрос .... Упс. Maarten 8 лет назад 0
-3
Jeff N

(Re-) Read the man page for wget and look at the descriptions for the --user and --password flags.

Note that passing a password as a command line argument is not recommended, as anyone who runs ps can see it. The best practice is to not save raw passwords anywhere, but the next best is to put it in a file that only the owner can read.

Флаги, которые вы упоминаете, относятся к аутентификации на основе HTTP (базовая, дайджест и т. Д.) SE не использует ничего из этого для аутентификации. Они используют стороннего [OpenID] (http://en.wikipedia.org/wiki/OpenID) провайдера для аутентификации. heavyd 10 лет назад 3

Похожие вопросы