如何使用Wget等命令行工具登录OpenID网站?


10

具体来说,我希望能够从我的用户配置文件中的各个Stack Exchange网站上下载某些页面。但是,我想cron从命令行以可解析的格式自动执行此操作(使用作业)。我更喜欢使用Linux,但是如果需要,我可以访问Mac或Windows计算机。

理想情况下,我想使用WgetcURL之类的工具来获取页面。我不知道如何通过登录。我已经看到一些建议,其中提到您可以通过Firefox登录,导出相关的Cookie并通过其--load-cookies选项将其导入Wget 。例如在这里这里。如果我刚刚登录,这可以正常工作,但不久后就不会生效。我想是因为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。我认为这比Web应用程序更适合这里,因为我的问题实际上是关于命令行方面的,而不是所讨论网页的实际细节。我想任何解决方案都将适用于所有OpenID网站。


3
您是否研究过SE API(api.stackexchange.com),看它是否提供了您所需要的信息?这是获得程序访问数据的官方方法,它使用OAuth进行身份验证。
2013年

@heavyd是的,我有点希望我不必为此专门研究API。如果那是我必须的唯一方法。粗略地看,它似乎并没有显示我可以通过API自动执行登录过程。您知道我是否可以通过不需要我主动输入的方式进行身份验证吗?如果我正确理解文档以获取需要身份验证的数据,则需要手动登录
。– terdon

我实际上并没有使用SE API,但是在其他OAuth实现中,我曾经使用过一次登录,并且获得了无限期有效的令牌。
13年

Answers:


1

您不能,因为Cookies经常刷新。这是出于安全性目的,您执行此操作的唯一方法是已经执行的方法。据我了解,至少。


我只是看到这是一个非常老的问题。
马滕

-3

(重新)阅读的手册页,wget并查看--user--password标志的描述。

请注意,不建议将密码作为命令行参数传递,因为运行的任何人 ps都可以看到它。最佳做法是不要将原始密码保存在任何地方,但次佳做法是将其放在只有所有者可以读取的文件中。


3
您提到的标志用于基于HTTP的身份验证(基本,摘要等)。SE不使用任何这些进行身份验证。他们依赖第三方OpenID提供程序进行身份验证。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.