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

需要活动会话的Ruby HTTP获取再次调用站点,ruby,session,authentication,cookies,get,Ruby,Session,Authentication,Cookies,Get,我正在尝试获取https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx以获取索引状态编号,由于某些原因,该编号未通过网站管理员v3API公开 现在我不能只做一个HTTParty.get(url)调用,因为这只会让我重定向到帐户登录页面(https://accounts.google.com/ServiceLogin?xxxxxx)。如果我运行HTTParty.get(url,{follow\

我正在尝试获取
https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx
以获取索引状态编号,由于某些原因,该编号未通过
网站管理员v3
API公开

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

基本上,问题是:是否可以将现有的登录cookie提供给脚本,或者让脚本“登录”,然后存储会话cookie

后一部分基本上包括:

  • 获取对
    https://accounts.google.com
  • 发布并提交登录表单
  • 等待响应,保存cookie
  • 使用该会话转到上面的搜索控制台URL

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


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

是的,可以使用cookie发送请求。浏览器就是这样工作的

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

由于建议了
机械化
,因此归功于。对于任何正在寻找如何为您需要的任何服务获取有效的google会话的人:

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永久存储在某个地方,这样我就不必每次使用它时都登录。

感谢您建议
机械化
。对于任何正在寻找如何为您需要的任何服务获取有效的google会话的人:

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永久存储在某个地方,这样我就不必每次使用它时都登录。

请阅读“”和链接页面。如果代码有问题,也请阅读“”。我们需要更好地描述这个问题。我们需要更好地了解你是如何做到这一点的。你考虑过使用吗?它的目的是帮助浏览网站,并可以为您处理cookies。谢谢。通过Mechanize,我可以获得我的google会话,并浏览我需要的站点。请阅读“”和链接页面。如果代码有问题,也请阅读“”。我们需要更好地描述这个问题。我们需要更好地了解你是如何做到这一点的。你考虑过使用吗?它的目的是帮助浏览网站,并可以为您处理cookies。谢谢。有了Mechanize,我可以获得我的google会话,并获得我需要的站点。YAML是一种很好的候选格式。只需将信息存储在与源代码相关的文件中。该类易于使用,并随Ruby一起提供。有很多这样的例子。如果您不想让窥探者轻易看到它,那么基于磁盘的SQLite DB会更安全一些。这很容易。如果你更偏执的话,你可以对它进行加密和解密,但如果源代码可用,那将是浪费时间。如果谷歌有一个相关的API来处理你试图获取的任何东西,你最好使用它。刮取是最后的尝试,更容易失败。正如我提到的,这个特定的数据点不是API的一部分,所以我不得不求助于刮取。谢谢你的YAML提示,我会研究一下。YAML是一个很好的候选格式。只需将信息存储在与源代码相关的文件中。该类易于使用,并随Ruby一起提供。有很多这样的例子。如果您不想让窥探者轻易看到它,那么基于磁盘的SQLite DB会更安全一些。这很容易。如果你更偏执的话,你可以对它进行加密和解密,但如果源代码可用,那将是浪费时间。如果谷歌有一个相关的API来处理你试图获取的任何东西,你最好使用它。刮取是最后的尝试,更容易失败。正如我提到的,这个特定的数据点不是API的一部分,所以我不得不求助于刮取。谢谢你的YAML提示,我会调查的。