Kivy 中的 HTTPS 请求

Posted

技术标签:

【中文标题】Kivy 中的 HTTPS 请求【英文标题】:HTTPS Request in Kivy 【发布时间】:2019-02-28 03:09:23 【问题描述】:

我一直在努力处理绑定到通过 AWS API Gateway 托管的 API 的 Kivy 应用程序中的 HTTPS 请求。首先,我从 Python3 转到 2,然后从 requests 库转到 kivy 的 URLRequest。

该应用程序在我的 linux 桌面上运行良好。当我使用请求库发出 API 请求时,出现 SSL 错误:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

我转而使用 URLRequest,它似乎与 requests 有相同的 SSL 错误。传入 URLRequest 错误回调的参数是:(, SSLError(1, '_ssl.c:503: error:14077410:SSLroutines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure')))

我发现了这个 *** 问题:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure [Kivy]

这意味着这与过时的 python 版本有关。

只是 Kivy android 应用无法与 AWS API 网关通信吗?

Buildozer .spec 行: 要求 = hostpython2、kivy、future、python-dateutil、openssl、pyopenssl、jmespath、botocore、boto3、requests

android.permissions = 互联网

更新:我使用 URL https://kivy.org/logos/kivy-logo-black-64.png 测试了一个 HTTPS GET 请求。这在 Android 应用程序中成功完成。这个问题似乎特定于 AWS API Gateway 使用的 SSL 版本

UPDATE2:Android 上的 Kivy 也可以与 Google Cloud Platform 的云功能 HTTPS 端点一起正常工作。更多证据表明此问题与 AWS API Gateway 密切相关。

【问题讨论】:

blog.techstacks.com/2010/03/… 这篇文章可能会帮助您进一步调试。我看到了错误的主机名或使用了错误的端口(80 而不是 443)等问题。尝试使用带有 curl --sslv2 的 AWS url 【参考方案1】:

确保您的 .spec 文件具有 Internet 权限。另外,如果您使用 python2,我相信您的要求中需要“hostpython2”。我不确定您在其中的任何要求是否依赖于 python 2 或 3,但如果您使用的是 python 2,请确保它们适用于 python 2。此外,我认为您的请求要求中不需要 [安全]。尝试只输入“请求”,您也可以尝试安装 sqlite 并将其添加到您的要求中。

【讨论】:

我在需求中添加了 hostpython2。我已经更新了问题以显示新的要求列表。我已经在 buildozer.spec 中授予了 INTERNET 权限(该行也添加到问题中)。我尝试添加 sqlite,但遇到了一些问题。 sqlite 可能会为 SSL 添加一些东西吗? @noobiemcfoob 有什么解决办法吗?我面临着类似的问题。 @PetarLuketina:这似乎是 AWS 中 HTTPS 实施特有的问题。我能够通过 HTTPS 与 Google Cloud Platform API 进行通信。 @noobiemcfoob 实际上我昨晚也想通了。我向我的buildoze.spec 添加了一项要求,它在我的应用程序中显示了数据库。我相信它只是添加openssl(我会仔细检查)以及您已经拥有的requests、python、kivy 等。不过,我很高兴你能弄明白! @noobiemcfoob 嘿。我刚做了一个教程。这是所有文件的 github 页面:github.com/Petar-Luketina/Firebase-Sample。 README.md 中还有一个 YouTube 视频链接。希望对您有所帮助!

以上是关于Kivy 中的 HTTPS 请求的主要内容,如果未能解决你的问题,请参考以下文章

猕猴桃中的参考按钮

如何禁用 Kivy 中的小部件?

如何更新kivy中的椭圆颜色?

ListView 中的 Kivy 访问项

导航抽屉中 kivy 中的类型错误

卡在 Kivy 中的类函数