Python 如何认证HumbleBundle

Python 如何认证HumbleBundle,python,python-requests,Python,Python Requests,我想写一个程序来自动下载我购买的简陋捆绑包,但我很难登录到这个网站。我认为这应该是一个非常简单的过程: import requests LOGIN_URL = "https://www.humblebundle.com/processlogin" data = { "username": "username", "password": "top_secret", } session = requests.Session() session.params.update({"a

我想写一个程序来自动下载我购买的简陋捆绑包,但我很难登录到这个网站。我认为这应该是一个非常简单的过程:

import requests

LOGIN_URL = "https://www.humblebundle.com/processlogin"

data = {
    "username": "username",
    "password": "top_secret",
}

session = requests.Session()
session.params.update({"ajax": "true"})

response = session.post(LOGIN_URL, data=data)
json = response.json()
print(json)
但我得到了一个毫无帮助的失败信息

{'errors': {'_all': ['Invalid request.']}, 'success': False}

我做错了什么?

我不认为它会让你这么做。如果我不得不猜测,您将不得不使用OAuth。

Humble Bundle使用验证码来确保只有人类登录。似乎只有登录的用户才能检索他们购买的信息,但我还没有找到另一种方式来验证自己

根据设计,验证码不允许脚本登录。我的最佳建议是使用常规webbrowser登录,并在本地存储名为“\u simpleauth\u sess”的cookie的值。您可以使用它来检索数据,就像您已登录一样

以下是OP使用的请求库示例:

cookies = dict(_simpleauth_sess='easAFa9afas.......32|32u8')
url = 'https://www.humblebundle.com/api/v1/user/order'
r = requests.get(url, cookies=cookies)
print(r.text)
或者更复杂一点:

session = requests.Session()
session.cookies.set('_simpleauth_sess', 'easAFa9afas.......32|32u8', 
                    domain='humblebundle.com', path='/')
r = session.get('https://www.humblebundle.com/api/v1/user/order')
for order_id in [v['gamekey'] for v in r.json()]:
    url = 'https://www.humblebundle.com/api/v1/order/{}?wallet_data=true&all_tpkds=true'.format(order_id)
    r = session.get(url)
    ...