Периодические ошибки расшифровки SSL при выполнении запросов POST Python - PullRequest
0 голосов
/ 10 июня 2019

У нас есть приложение, работающее на Heroku (на основе Ubuntu 18), серверная часть находится в Python Django, и когда наши пользователи загружают PDF в наше приложение, мы вызываем API анализатора резюме, чтобы проанализировать резюме и создать кандидата дляих.

Он работает нормально, до недавнего времени мы видели некоторые ошибки SSL при выполнении запросов POST в API анализатора резюме, это случается редко, но теперь оно появляется несколько раз в неделю (мы ничего не меняли, поскольку мызнаете, может быть, наша база пользователей растет)

Вот код:

    api_url = "https://eu-rest.resumeparsing.com/v9/parser/resume"
    base64str = base64.b64encode(resume_file).decode("UTF-8")
    payload = {"DocumentAsBase64String": base64str}
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "sovren-accountid": self.api_account_id,
        "sovren-servicekey": self.api_key,
    }
    response = requests.request(
        "POST", api_url,
        data=json.dumps(payload),
        headers=headers
    )

А вот случайные ошибки (происходящие в строке запросов POST): мы сталкивались с этим несколько раз:

SSLError
[SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2305)

И это однажды встретилось:

SSLError
HTTPSConnectionPool(host='eu-rest.resumeparsing.com', port=443): Max retries exceeded with url: /v9/parser/resume (Caused by SSLError(SSLError(1, '[SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2305)'),))

Но, глядя на трассировку стека, кажется, что ответ содержит полезную нагрузку проанализированного резюме, что заставляет нас думать, что их APIвсегда отвечает нормально.Кроме того, их журналы в порядке.

Мы искали и читали, что мы могли бы попытаться передать такие параметры, как verify = False или keepalive = False, в функцию запросов POST, но это не было рекомендовано в производстве (инаша ошибка возникает только в работе с перерывами, мы не можем ее воспроизвести)

Также мы читаем, что это может быть проблемой параллелизма, когда несколько пользователей делают запросы одновременно, и это также может быть связано с opensslВ библиотеке мы заметили, что версия в Heroku была "OpenSSL 1.1.0g 2 ноября 2017", но, например, в моей локальной версии это "OpenSSL 1.1.1b 26 февраля 2019"

Может ли это быть версия openssl?Или проблема параллелизма или что-то еще?Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...