如何自动获取Python requests发POST请求时频繁变动的authorization token
自动获取动态Bearer Token的可行方案
- 方案1:模拟登录接口直接获取Token
大部分场景下Bearer Token是账号登录后由后端登录接口返回的,你可以先抓取登录请求的参数和地址,先调用登录接口拿到有效Token,再代入到后续的业务请求头中即可,修改后的代码参考结构如下:
import requests import json # 先请求登录接口获取Token login_url = "你抓取到的网站登录接口地址" login_data = { "username": "你的账号", "password": "你的密码", # 其他登录所需参数,可从Chrome DevTools的登录请求详情里提取 } login_resp = requests.post(login_url, json=login_data) # 此处json取值路径根据登录接口实际返回的结构调整 token = login_resp.json()["data"]["access_token"] # 发起目标业务请求 url = "..." payload = {...} headers = { ..., "Authorization": f"Bearer {token}", ... } response = requests.post(url, json=payload, headers=headers)
- 方案2:用浏览器自动化工具提取Token
如果登录环节有验证码、滑块、设备指纹等反爬逻辑,无法直接模拟登录的话,可以用Selenium、Playwright这类工具控制浏览器完成登录操作,直接从浏览器的本地存储、Cookie或接口响应中提取Token,无需手动抓包。
Playwright实现参考:
from playwright.sync_api import sync_playwright import requests current_token = "" with sync_playwright() as p: # 启动浏览器,headless设为True可后台运行 browser = p.chromium.launch(headless=False) page = browser.new_page() # 监听接口响应,匹配返回Token的登录接口 def catch_token(response): global current_token if "login" in response.url and response.ok: resp_data = response.json() # 取值路径按实际接口返回调整 current_token = resp_data.get("data", {}).get("token", "") page.on("response", catch_token) page.goto("网站登录页面地址") # 自动填充账号密码完成登录 page.fill('input[name="username"]', "你的账号") page.fill('input[name="password"]', "你的密码") page.click('button[type="submit"]') page.wait_for_timeout(3000) browser.close() # 后续业务请求逻辑和之前一致
- 方案3:复用Cookie绕过单独传Token
如果网站会把登录态存在Cookie中,也可以直接复制登录后的完整Cookie放到请求头里,不需要单独提取Authorization头,只要Cookie未过期就能正常发起请求,仅需定期更新Cookie即可。
注意:操作前请确认对应网站的服务使用条款,避免违规导致账号被限制。
内容的提问来源于stack exchange,提问作者yoav
相关产品推荐
相关产品推荐

