Ruby HTTP再次调用需要活动会话的站点

时间:2016-08-03 17:27:07

标签: ruby session authentication cookies get

我正在尝试获取https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx的来源,以便获取由于某种原因未通过webmasters v3 API公开的索引状态编号。

现在我不能只进行HTTParty.get(url)调用,因为这只会让我重定向到帐户登录页面(https://accounts.google.com/ServiceLogin?xxxxxx)。如果我运行HTTParty.get(url, {follow_redirects: false}),我会收到302错误,因为该网页无法将我重定向到Google的登录页面。

基本上问题是:是否可以获取我现有的登录cookie并将其提供给脚本或让脚本“登录”然后存储会话cookie?

后一部分基本上包括:

  • 致电https://accounts.google.com
  • POST提交登录表单
  • 等待回复,保存cookie
  • 使用该会话转到上述搜索控制台网址

2 个答案:

答案 0 :(得分:0)

是的,可以使用您的cookie并发送它。这就是浏览器的工作原理。

来自Wikipedia

GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
…

要弄清楚到底发生了什么,需要做一些工作。我建议查看浏览器上的“网络”选项卡以查看每个HTTP请求。

答案 1 :(得分:0)

@the-tin-man建议mechanize。对于其他任何想要获得有效谷歌会话的人来说,无论您需要什么样的服务:

agent = Mechanize.new
login_page = agent.get("https://accounts.google.com")
login_form1 = login_page.form
login_form1.Email = "your_google_email_here"
login_form2 = login_form1.click_button
login_form2.form.Passwd = "your_google_password"
login_form2.form.click_button
#at this point you have a valid google session so the next part is specific for my needs
search_console_page = agent.get("https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx")
total_indexed = search_console_page.search("td.property div.primary").inner_html.gsub(',', '').to_i

现在我只需要弄清楚如何永久存储该cookie,这样我每次使用时都不需要登录。