0

我无法针对具有 google 提供的 Oauth 的 Web 服务进行身份验证。基本上,我想用我的谷歌帐户登录到一个网页来做一些抓取。

由于 Web 服务不是我的,我没有应用程序 secret_key,只有客户端 ID、redirect_URL 和范围,我可以从登录时看到使用的请求方法的参数中恢复。

一旦通过身份验证,网页只需要一个名为 SID(我猜是会话 ID)的 cookie 以作为经过身份验证的用户回复。没有承载令牌,只有 SID cookie。

是否可以自动化这种类型的身份验证?我已经阅读了许多相关主题,但它们都需要我没有的 secret_key,因为我不是应用程序的所有者。

4

1 回答 1

0

(由于代表无法发表评论)

是的,你问的是可能的。理论上,您可以遵循并匹配所有请求以成功验证自己以获取 SID 并执行抓取,尽管这对于一些基本的网络抓取来说是一项非常困难的任务,这就像编写一个成熟的科学计算器来执行 5 + 5 . 你要问的是一项非常艰巨的任务,当你尝试使用 Python 请求登录你的帐户时,你会遇到各种安全问题,并被要求进行电话/身份验证器应用程序/电子邮件验证,然后你需要要跟踪这些安全 cookie 并使其保持更新,这真是一团糟,对任何人来说都非常困难。

我认为更好的方法是手动验证自己并将SIDcookie 和硬编码到cookieHTTP 标头中的刮板中。

我知道这会引起人们对 SID cookie 过期时该怎么做的担忧。由于您还没有说该网站,我很难想象一个网站可以让您经常向 Google 验证自己的身份,而不是拥有自己的内部 SID/JWT 刷新系统来让您保持登录状态。

我的建议是:

  • 检查 SID cookie 的过期时间,如果可以在验证自己后手动复制并粘贴它,请执行此操作。
  • 如果 SID 即将过期,请检查是否有任何 API 请求为自己获取新 SID(无需再次通过 OAuth),在您的网络面板中查找set-cookie设置新 SID 的响应标头,您可能需要更改并跟踪这些在你的程序中,但它会比编写程序登录到谷歌要容易得多。
  • 如果没有办法刷新 SID 并且它们经常过期并且您需要进行长期的网络抓取并坐在那里每 30 分钟手动获取一个新的 cookie 是不够的,我建议考虑使用 Puppeteer/Chromium因为它比通过 Python HTTP 请求更容易。
于 2021-11-28T16:50:19.060 回答