我想编写一个程序来自动下载我的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}
我做错了什么?
答案 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)
...