Как сохранить Http-клиент для дайджест-проверки подлинности при использовании без сервера - PullRequest
0 голосов
/ 15 ноября 2018

Я разрабатываю приложение Python, которое отправляет данные на веб-сервер через их REST API. Сервер использует дайджест-аутентификацию для вызовов API. Теория дайджест-аутентификации заключается в аутентификации клиента в два этапа. Первоначальное рукопожатие использует токен, клиент получает заголовок WWW-Authenticate от сервера, и создается новое число одноразовых и одноразовых номеров. Затем выполняется второй вызов с фактическим запросом API с реальными данными.

Первоначальный дизайн заключается в том, чтобы поддерживать HTTP-клиент живым после установления первоначального соединения, чтобы клиент увеличивал число одноразовых номеров с каждым запросом в течение времени существования одноразового номера. Это позволит избежать накладных расходов, связанных с созданием потока и повторной установкой HTTP-клиента каждый раз, когда нам нужно отправить данные на сервер. Приложение работает в качестве службы на экземпляре Linux EC2 в AWS. Так что поддерживать HTTP-клиент вполне нормально.

import requests

sess = requests.Session()
sess.auth = HTTPDigestAuth(USERNAME, TOKEN)
sess.verify = False
sess.mount('https://', HTTPAdapter(max_retries=HTTP_CLIENT_RETRY_MAX))

Однако на следующем этапе мы думаем об отсутствии сервера, а лямбда-функция будет специфической. Он масштабируется намного лучше, и нам не нужно обслуживать сервер EC2. Проблема в том, что каждый раз, когда запускается функция Lambda для отправки данных на сервер, у нее нет памяти о предыдущем вызове API. Это означает, что он будет каждый раз заново создавать экземпляр HTTP-клиента, что неэффективно. Интересно, есть ли способ сохранить HTTP-клиента живым, используя функцию Lambda?

...