我们有一个在Heroku上运行的应用程序(基于Ubuntu 18),后端在Python Django中,当用户在我们的应用程序中上传PDF简历时,我们调用简历解析器API来解析简历并创建候选人他们。
工作正常,直到最近我们在恢复解析器API上执行POST请求时看到一些SSL错误,这种情况很少发生,但现在每周都会弹出几次(据我们所知,我们尚未更改任何内容,也许我们的用户基地正在增长)
代码如下:
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 2017年11月2日”,但例如,我本地的版本为“ OpenSSL 1.1.1b 26 Feb 2019”
可以是openssl版本吗?还是并发问题或其他?谢谢