Gel*_*der 11 python heroku python-requests
我似乎无法让握手正常工作.
cert = 'path/to/cert_file.pem'
url = 'https://example.com/api'
requests.get(url, cert=cert, verify=True)
Run Code Online (Sandbox Code Playgroud)
当我在本地使用它时,这是很好的,我在物理上有文件.我们在heroku上托管我们的应用程序并使用environvariables.
请求模块似乎不接受证书作为字符串.例如.
$ export CERTIFICATE="long-list-of-characters"
requests.get(url, cert=get_env('CERTIFICATE'), verify=True)
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样的事情:
cert = tempfile.NamedTemporaryFile()
cert.write(CERTIFICATE)
cert.seek(0)
requests.get(url, cert=cert.name, verify=True)
Run Code Online (Sandbox Code Playgroud)
首先,它在本地工作,但不在heroku上工作.无论如何,它不是一个坚实的解决方案.我收到SSL握手错误.
有什么建议?
小智 6
Vasili 的回答在技术上是正确的,尽管它本身并没有回答你的问题。实际上,密钥文件一开始必须是未加密的。
我自己刚刚解决了像你这样的情况。你走在正确的道路上;你所要做的就是
1.传递delete=False给NamedTemporaryFile(),调用后文件不会被删除close()
2. close()使用之前的临时文件,所以它会被保存
请注意,这是非常不安全的做法。delete=False,据我所知,即使删除了对它的引用,也会导致文件保留在磁盘上。因此,要删除文件,您应该手动调用os.unlink(tmpfile.name).
使用证书执行此操作会带来巨大的安全风险:您必须确保带有证书的字符串是安全且隐藏的,并且没有人可以访问服务器。
然而,这是一个非常有用的实践,例如,在 Heroku 服务器上作为测试环境管理您的应用程序,并在云中构建的 Docker 映像中管理您的应用程序,其中COPY指令不是一个选项。这也绝对比将文件存储在 git 存储库中更好:D
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |