首先,我要说大约两周前我开始学习Python,而我不是专业的程序员。所以,我有一个Pi 3,正在玩一些家庭自动化的东西。具体来说,我正在尝试让Pi使用记录不良的API控制我的Hive设备。
我正在使用Flask并具有登录路径,将访问令牌存储在会话变量中,检查变量是否存在等。
我能找到的检查登录状态的唯一方法是发送一个简单的请求,并查看它是否返回错误。如果我将令牌硬编码到JSON中,这将起作用。
这就是我所拥有的:
url = "https://api.prod.bgchprod.info:443/omnia/users"
hiveSessionId = session['hiveSessionId']
print hiveSessionId
headers = {
'Content-Type': "application/vnd.alertme.zoo-6.1+json",
'Accept': "application/vnd.alertme.zoo-6.1+json",
'X-Omnia-Client': "Hive Web Dashboard",
'X-Omnia-Access-Token': "{hiveSessionId}",
'Cache-Control': "no-cache",
}
print headers
response = requests.request("GET", url, headers=headers)
data=response.json()
print(response.text)
if 'errors' in data:
return "Not logged in"
return "Logged in"
这句话说:
'X-Omnia-Access-Token': "{hiveSessionId}",
。我已经尝试过各种不同的双引号,单引号,转义符等允许-所有这些都可以在stackexchange上找到。
运行此命令后得到的是:
B4QpAIxAzIebkSKCQFCIjwQlALaLt
{'X-Omnia-Client': 'Hive Web Dashboard', 'Accept': 'application/vnd.alertme.zoo-6.1+json', 'X-Omnia-Access-Token': '{hiveSessionId}', 'Cache-Control': 'no-cache', 'Content-Type': 'application/vnd.alertme.zoo-6.1+json'}
{"errors":[{"code":"NOT_AUTHORIZED"}]}
因此会话ID在那。我觉得这只是将字符串插入错误的JSON标头中的语法。
任何帮助都会感激不尽。
欢呼 安迪
答案 0 :(得分:1)
典型!
我在这里张贴后10秒钟,经过大约3个小时的混乱,我找到了答案。专家会知道,但这是我为其他正在寻找的人所做的事情:
'X-Omnia-Access-Token': hiveSessionId,
就这么简单。
欢呼 安迪
答案 1 :(得分:0)
恭喜您,您已经找到了答案:)另外,我建议您使用Python 3代替2。您可以使用一些有用的功能,例如f字符串文字:
'X-Omnia-Access-Token': f"{hiveSessionId}",
对于此任务,当然是多余的,但也许您会发现它很吸引人:)