在python中更新访问令牌

时间:2018-09-20 15:50:39

标签: python python-3.x python-requests access-token

这是我的第一个问题,请耐心等待。我正在使用一个使用15分钟后到期的访问令牌进行身份验证的API,没有刷新令牌可用于重新登录的环境。到目前为止,我已经能够获取访问令牌并将其插入到requests.get调用中,但是我似乎无法获取它来进行更新,并且在操作方法上迷失了方向。 与此API一起完成的所有工作,通常是与Python一起完成的,因此我希望将其整个文件都保存在Python中,并保存在同一文件中。

15分钟结束后,我会收到401消息代码,如果成功,则会得到代码200。到目前为止,我唯一的想法是将其放在计时器上进行更新,但是我无法在堆栈溢出帖子或有关此操作的文档上留下头或尾,让登录在单独的脚本中运行,然后此脚本为当前脚本调用另一个标头变量(但仍然需要一个计时器),或者在遇到response.status_code != 200后调用它来重做登录功能。

获取访问令牌的示例脚本

import requests, os, json, time, csv
def login (url, payload):
    #this will log into API and get an access token
    auth = requests.post(url, data=payload).json()
    sessionToken = auth["token"]
    sessionTimer = auth["validFor"]
    headers = {'Access-Token': sessionToken}
    return headers
#calling the function to generate the token
if __name__ == '__main__':
    url = "url inserted here"
    u = input("Enter your username: ")
    p = input("Enter your password: ")
    t = input("Enter your tenancy name: ")
    payload = {'username': u, 'password': p, 'tenant': t}
    print("Logging in")
    headers = login(url, payload)
#the actual work as pulled from a csv file
valuables = input("CSV file with filepath: ")
file = open(valuables, 'r', encoding='utf-8')
csvin = csv.reader(file)
for row in csvin:
    try:
        uuidUrl = row[0]
        output_file = row[1]
        response = requests.get(uuidUrl, headers=headers)
        print(response.status_code)
        with open(output_file, 'wb') as fd:
            for chunk in response.iter_content(chunk_size=128):
                fd.write(chunk)
        fd.close()
    except requests.exceptions.RequestException:
        print(output_file,"may have failed")
        login(url, payload)
        continue

我无法成功地识别出if response.status_code != 200:作为回调login()的一种方式。我似乎也无法使它退出while True:循环。

很抱歉,我无法提供有关其他人访问该API的更多详细信息。这是非公开的

1 个答案:

答案 0 :(得分:0)

最终,我能够找出自己问题的答案。将其发布给以后的用户。更新的代码段如下。

故事的简短版本:requests.status_code发送回一个整数,但是我错误地假设它将是一个字符串,因此我的内部比较不好。

for row in csvin:
    try:
        uuidUrl = row[0]
        xip_file = row[1]
        response = requests.get(uuidUrl, headers=headers)
        status = response.status_code
        print(status)
        if status == 401:
            print(xip_file, "may have failed, loggin back in")
            login(url, payload)
            headers = login(url, payload)
            response = requests.get(uuidUrl, headers=headers)
            with open(xip_file, 'wb') as fd:
                for chunk in response.iter_content(chunk_size=128):
                    fd.write(chunk)
            fd.close()
        else:
            with open(xip_file, 'wb') as fd:
                for chunk in response.iter_content(chunk_size=128):
                    fd.write(chunk)
            fd.close()
    except requests.exceptions.RequestException:
        print(xip_file,"may have failed")
        headers = login(url, payload)
        continue