使用Python

时间:2018-07-29 10:53:57

标签: python json

首先,我要说大约两周前我开始学习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标头中的语法。

任何帮助都会感激不尽。

欢呼 安迪

2 个答案:

答案 0 :(得分:1)

典型!

我在这里张贴后10秒钟,经过大约3个小时的混乱,我找到了答案。专家会知道,但这是我为其他正在寻找的人所做的事情:

'X-Omnia-Access-Token': hiveSessionId,

就这么简单。

欢呼 安迪

答案 1 :(得分:0)

恭喜您,您已经找到了答案:)另外,我建议您使用Python 3代替2。您可以使用一些有用的功能,例如f字符串文字:

'X-Omnia-Access-Token': f"{hiveSessionId}",

对于此任务,当然是多余的,但也许您会发现它很吸引人:)