使用Ruby脚本通过https登录网站

好吧,所以这是故事:我正在开发一个Ruby应用程序,它将从网站获取数据,并将该数据聚合到XML文件中。

我需要从中获取数据的网站没有我可以使用的任何API,所以我唯一能想到的是登录网站,依次加载有我需要的数据的页面(在这种情况下,PMs) ;我想存档它们,然后解析返回的HTML。

但问题是,我不知道以编程方式模拟登录会话的任何方法。

是否有人有任何建议,或知道我可以用来成功登录到https页面的任何经过validation的方法,然后使用登录中的临时cookie会话以编程方式从网站加载页面? 它不一定是一个只有Ruby的解决方案 – 我只想知道我是如何实现这一点的。 如果有帮助,有问题的网站是使用Microsoft的.NET Passport服务作为其登录/会话机制的网站。

有关此事的任何意见都是受欢迎的。 谢谢。

机械化

Mechanize是ruby库,它模仿Web浏览器的行为。 您可以单击链接,填写表单并提交。 它甚至有历史和记忆cookies。 看来你的问题可以在机械化的帮助下轻松解决。

以下示例来自http://mechanize.rubyforge.org :

require 'rubygems' require 'mechanize' a = Mechanize.new a.get('http://rubyforge.org/') do |page| # Click the login link login_page = a.click(page.link_with(:text => /Log In/)) # Submit the login form my_page = login_page.form_with(:action => '/account/login.php') do |f| f.form_loginname = ARGV[0] f.form_pw = ARGV[1] end.click_button my_page.links.each do |link| text = link.text.strip next unless text.length > 0 puts text end end 

您可以尝试使用wget来获取页面。 您可以使用此应用程序www.portswigger.net/proxy/分析登录过程。

对于它的价值,您可以查看Webrat 。 它用于自动验收测试的工具,但我认为您可以使用它来模拟填写登录字段,然后按名称单击链接,并将所需的HTML作为字符串获取。 没有尝试做过类似的事情。