【问题标题】:API Authentication from Google Chrome in Python在 Python 中来自 Google Chrome 的 API 身份验证
【发布时间】:2025-12-18 03:40:01
【问题描述】:

我提前道歉,因为我对这些东西很陌生。我见过类似的问题,但无法弄清楚我的具体情况。

我正在尝试通过 Python 使用 API,但不知道如何进行身份验证并且没有文档。我使用具有网站的服务。该网站似乎由 API 提供支持。因此,当我通过 ctrl-shift-I 跟踪我的所有网络流量时,我可以在单击网站时看到我需要使用的所有 API 调用。因此,即使 API 没有记录在案,我也知道我需要的所有端点。

一旦我通过网站登录我的帐户,API 就会通过身份验证。然后我可以在浏览器中向 API 发出请求。但是,我似乎无法弄清楚如何在请求库中通过 Python 进行身份验证。我对任何身份验证方式持开放态度,甚至根据 Stack Overflow 上的其他建议尝试使用浏览器中的 cookie,但我对这种方法非常不熟悉。

我在这里完全错过了什么吗?我在 Stack Overflow 中发现的大多数这些身份验证方法似乎都适用于其他人。

s = requests.Session()
payload = {'usernameOrEmail': 'XXXXXXX', 'password':'XXXXXXX'}
s.post('https://XXXXXXX', json=payload, headers={'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'})

s = requests.Session()
payload = {'usernameOrEmail': 'XXXXXXX', 'password':'XXXXXXX'}
s.post('https://XXXXXXX', json=payload)


url = 'https://XXXXXXX'
    values = {'usernameOrEmail': 'XXXXXXX',
              'password': 'XXXXXXX'}

r = requests.post(url, data=values, verify=False)

我尝试过使用登录页面的 URL、您在登录后被转发到的会员概览页面、API URL/端点等。我 98% 确定我的名称值对是正确的用户名和密码。

我什至尝试了一个简单的获取请求并在 URL 上附加用户名或电子邮件和密码字段。

我最近收到了 401、404 和 405,具体取决于 URL 方法组合。

提前道歉,因为我确信这是非常基本的事情。我在提交用户名和密码方面是否走在正确的轨道上,还是需要走使用浏览器 cookie 的路线?

我通过 Anaconda 使用 Spyder。

谢谢

针对产生 404 的代码进行了更新:

import requests

s = requests.Session()

payload = {'username_or_email': 'XXXXXXX', 'password':'XXXXXXX'}

test=s.post('https://members.onepeloton.com/login', json=payload)

print(test)

【问题讨论】:

    标签: python-3.x python-requests urllib


    【解决方案1】:

    除了运行 Javascript 之外,您可以在 Python 中执行任何与 HTTP 相关的操作,而您可以在浏览器中执行此操作。

    您可能缺少请求或某些参数。也许在您开始浏览器会话之前已经设置了一个 cookie。

    尝试记录和模拟来自隐身标签的所有请求,这样您就可以确定您以与 Python 会话相同的状态开始。

    如果您能告诉我们您尝试对哪个网站进行身份验证,也许我们可以为您提供更多帮助。

    【讨论】:

    • 感谢您的浏览。我知道我对此很陌生,尤其是在身份验证方面。这是登录页面:members.onepeloton.com/login
    • 所以,看看登录端点。而且您似乎拼错了一个参数。使用 username_or_email 而不是 usernameOrEmail。此外,您的标题以:Mozilla 开头,应该是一个具有“User-Agent”键的字典。
    • 谢谢。我在源代码中看到它是 usernameOrEmail,但也许我找错了地方。我包括了那个标题,因为我在其他帖子中看到了一些 cmets,说有时网站会阻止自动请求。因此,如果没有标头,那么简单的工作: s = requests.Session() payload = {'username_or_email': 'XXXXXXX', 'password':'XXXXXXX'} test=s.post('members.onepeloton.com/login', json=有效载荷)打印(测试)
    • 我现在收到一个错误:我现在收到:SSLError: HTTPSConnectionPool(host='members.onepeloton.com', port=443): Max retries exceeded with url: /login (由 SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)) 引起的
    • 我尝试更改代码以添加 verify=False,正如我在另一个 Stack Overflow 帖子中看到的那样,但得到了相同的错误