обновление токена доступа в python

1

Это мой первый вопрос, пожалуйста, несите меня. Я работаю с 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: как способ перезвонить на login(). Я также не мог заставить его выйти из while True: loop.

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

  • 0
    Я заметил, что вы вызываете login() внизу, но нигде не назначаете результат. Вам нужно переназначить headers = login(url, payload)
  • 0
    Спасибо за совет. Я добавил <code> headers = login (url, payload) </ code> перед вызовом файла csv, а затем внутри цикла, пытаясь снова вызвать заголовки. Безуспешно, вот так: <code> headers = login (url, payload) csvin = csv.reader (file) для строки в csvin: try: uuidUrl = row [0] xip_file = row [1] response = запросы.get ( uuidUrl, headers = headers) status = response.status_code if status == "401": логин (url, полезная нагрузка) заголовки = логин (url, полезная нагрузка) response = request.get (uuidUrl, headers = headers) </ code>
Теги:
python-requests
python-3.x
access-token

1 ответ

0
Лучший ответ

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

Короткий вариант истории: request.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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню