обновление токена доступа в python - PullRequest
0 голосов
/ 20 сентября 2018

Это мой первый вопрос, пожалуйста, потерпите меня.Я работаю с API, который проверяет подлинность с использованием токена доступа, срок действия которого истекает через 15 минут, но для повторного входа в систему не требуется токен обновления.До сих пор мне удавалось получить токен доступа и вставить его в вызов requests.get, но я не могу возобновить его, и затрудняюсь понять, как это сделать.Вся работа, выполняемая с этим API, и в целом выполняется с Python, поэтому я надеюсь сохранить его на Python повсюду и в одном файле.

Я получаю код сообщения 401 один раз за 15 минути код 200, если успешно.Пока что мои единственные идеи - поставить его на таймер для обновления, но я не могу сделать заголовки или хвосты сообщений stackoverflow или документации о том, как это сделать, чтобы вход в систему выполнялся в отдельном сценарии, а затем этот сценарий вызывает другой для текущегопеременная заголовка (но для этого все еще потребуется таймер), или вызовите ее, чтобы повторить функцию входа в систему, как только она достигнет 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: как способ перезвонить при входе в систему().Я также не мог заставить его выйти из цикла while True:.

Я извиняюсь, что не могу дать более подробную информацию о доступе к API для других людей, чтобы попробовать.Это не публично

1 Ответ

0 голосов
/ 25 сентября 2018

В конце концов я смог найти ответ на свой вопрос.Публикация этого для более поздних пользователей.Обновленный фрагмент ниже.

Краткая версия рассказа: запросы

...