如何通过Python访问需Google登录的REST接口?
解决方案
1. 核心逻辑
目标网站依赖Google OAuth 2.0身份验证,你需要先获取有效的Google授权凭证(通常是access_token或会话Cookie),再将凭证传递给目标网站接口才能通过授权校验。
2. 无浏览器实现方案(分场景)
场景一:可获取目标网站的Google OAuth应用信息
如果能拿到目标网站用于Google登录的client_id和client_secret,可以尝试OAuth 2.0密码授权流程(注:Google已逐步废弃该流程,仅对部分遗留应用开放):
import requests # Google令牌端点 token_url = "https://oauth2.googleapis.com/token" payload = { "grant_type": "password", "client_id": "你的client_id", "client_secret": "你的client_secret", "username": "你的Google邮箱", "password": "你的Google密码", "scope": "目标网站要求的权限范围(如openid email)" } # 获取access_token token_res = requests.post(token_url, data=payload) if token_res.status_code == 200: access_token = token_res.json()["access_token"] # 携带令牌调用目标接口 target_headers = {"Authorization": f"Bearer {access_token}"} api_res = requests.post("目标接口URL", json=你的payload, headers=target_headers) print(api_res.text) else: print("令牌获取失败:", token_res.json())
⚠️ 注意:若账号开启两步验证,需额外传递一次性验证码;且多数Google服务已不再支持该流程。
场景二:无法获取目标网站OAuth应用信息
只能手动模拟登录流程,通过requests维护会话Cookie完成授权,但Google登录页面参数、反爬机制频繁变化,稳定性极低:
import requests from bs4 import BeautifulSoup # 创建会话自动管理Cookie session = requests.Session() # 1. 访问目标网站,触发Google登录重定向 target_home = "目标网站URL" res = session.get(target_home) # 解析重定向后的Google登录页面,提取必要参数(如xsrf_token、continue_url) soup = BeautifulSoup(res.text, "html.parser") continue_url = soup.find("input", {"name": "continue"})["value"] xsrf_token = soup.find("input", {"name": "xsrf_token"})["value"] # 2. 提交Google邮箱 login_url = "https://accounts.google.com/v3/signin/identifier" email_payload = { "identifier": "你的Google邮箱", "continue": continue_url, "xsrf_token": xsrf_token } session.post(login_url, data=email_payload) # 3. 提交Google密码(若有两步验证需额外处理验证码) password_url = "Google密码验证接口URL" password_payload = { "password": "你的Google密码", "xsrf_token": xsrf_token, "continue": continue_url } session.post(password_url, data=password_payload) # 4. 回到目标网站完成授权,调用接口 session.get(continue_url) api_res = session.post("目标接口URL", json=你的payload) print(api_res.text)
3. 更可靠的替代方案
如果无浏览器方案难以维护,推荐用无头浏览器(如Playwright)模拟真实登录流程,获取Cookie后再用requests调用接口,稳定性更高:
from playwright.sync_api import sync_playwright import requests with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() # 完成Google登录流程 page.goto("目标网站URL") page.fill('input[type="email"]', "你的Google邮箱") page.click('button:has-text("下一步")') page.fill('input[type="password"]', "你的Google密码") page.click('button:has-text("下一步")') # 等待登录完成并跳转至目标网站 page.wait_for_url("目标网站首页URL") # 提取Cookie cookies = page.context.cookies() cookie_dict = {c["name"]: c["value"] for c in cookies} browser.close() # 携带Cookie调用目标接口 api_res = requests.post("目标接口URL", json=你的payload, cookies=cookie_dict) print(api_res.text)
内容的提问来源于stack exchange,提问作者Nicko Po
相关产品推荐
相关产品推荐

