如何验证HumbleBundle

时间:2017-05-07 20:30:23

标签: python python-requests

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

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}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

Humble Bundle使用CAPTCHA来确保只有人类登录。只有登录的用户似乎能够检索有关他们购买的信息(我还没有找到另一种方法来验证自己)。

按照设计,CAPTCHA不允许脚本登录。我最好的建议是使用常规的webbrowser登录,并在本地存储名为“_simpleauth_sess”的cookie的值。您可以使用它来检索数据,就像您已登录一样。

以下是OP使用的requests库的示例:

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)
    ...