【问题标题】:UrlRequest error (name 'HTTPSConnection' is not defined) kivyUrlRequest 错误(名称“HTTPSConnection”未定义)kivy
【发布时间】:2017-08-27 05:54:49
【问题描述】:

嗨!我有一个用 kivy 和 python3 编写的现成项目。这个节目 在所有桌面操作系统(Windows、Linux、MacOS)上都可以正常工作,但之后 编译成 .apk 文件,UrlRequest 对我不起作用。我什么 只是没有做,在 buildozer 中;

-- requirements = pyopenssl,openssl,docutils,android,python3crystax,kivy

-- android.permissions = INTERNET, ACCESS_NETWORK_STATE

在android上安装.apk文件并按下按钮后 抓取网站的页面,程序会产生错误

**name 'HTTPSConnection' is not defined**

这是带有 UrlRequest 的代码的一部分:

def get_html(self, link):
    try:
        from kivy.network.urlrequest import UrlRequest
        if isinstance(link, bytes):
            link = link.decode('utf-8')
        reg = UrlRequest(link, debug=True,
                         on_success=self.suc, on_error=self.err)
        while not reg.is_finished:
            sleep(0.5)
            Clock.tick()
    except HTTPError:
        pass

def suc(self, reg, result):
    self.add_widget(Label(
        text=str(result), font_size='15sp', color=(0, 0, 0, 1)
    ))

def err(self, reg, error):
    class Error(App):
        def build(self):
            win_report = BugReporter(txt_report=str(error))
            return win_report
    Error().run()

in variable (link) 从字典中插入链接。

dict_links = dict({
    "userful_programs": "https://pcompstart.com/?view=cat&category=1",
    "advice_on_computer": "https://pcompstart.com/?view=cat&category=2",
    "user_windows": "https://pcompstart.com/?view=cat&category=3",
    "articles_in_theme": "https://pcompstart.com/?view=cat&category=4",
    "popular_program": "https://pcompstart.com/?view=cat&category=5",
    "other": "https://pcompstart.com/?view=cat&category=6"})

我的 buildozer.spec 的完整文件日志,log_level = 2,附加在 这个链接; https://15530009509605697547.googlegroups.com/attach/38c18b633925d/logcat.txt?part=0.1&view=1&vt=ANaJVrFE1tvgVU8m0abaquknNDEzcXf_tgIMDdxEzo1tMSLUhqzNrto84pYWSc4sPxksIpmwEkAWhL_2IO2dptE2TLwFKzKJ535Vct_CDD_BgCz1M2G7u50

谢谢!

或者如果在同一个文件中我会执行 --

from http.client import HTTPSConnection

然后在android上编译后我得到错误--

 ImportError: cannot import name 'HTTPSConnection'

或者如果我会执行--

import ssl

然后在android上编译后我得到错误--

ImportError: No module named '_ssl'

可能在没有 SSL 支持的情况下进行 kivy 编译。这是错误还是我错了?

【问题讨论】:

    标签: android python-3.x kivy buildozer


    【解决方案1】:

    不确定这是否会有所帮助,我是新手,但最近几天我经历了非常相似的磨难。

    本质上,我正在努力处理简单的 HTTPS 请求。我已经尝试了所有可能的库,例如 urllib、urllib2、requests 和 kivy 的 UrlRequest,但没有成功。起初我尝试了 python3(和你一样),然后切换到 python2,因为它似乎一般产生的错误更少(不确定这是否真的如此)。

    最后,我遇到了同样的错误“HTTPSconnection not defined”,尝试了数百种方法,最后将“httplib2”放入需求(buildozer.spec)中成功了,它最终通过了同样的方式就像在桌面上一样。编译 httplib 时出现了一些错误(我已经阅读了一些关于编码的问题),但它仍然编译并工作。

    我的 buildozer.spec 重要的几行是:

    requirements = kivy, android, openssl, pyopenssl, httplib2 
    

    pyopenssl 我猜是多余的

    android.permissions = INTERNET, ACCESS_NETWORK_STATE
    

    我为测试应用导入的 main.py:

    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.network.urlrequest import UrlRequest
    

    希望对你有帮助,祝你好运

    【讨论】:

    • 我只使用了这个:kivy,openssl。我发现关键是在重建之前清理 buildozer 发行版。简单地更改需求并重建不会将新需求合并到二进制代码中。所以 buildozer android clean 然后 buildozer android debug deploy run 应该会产生积极的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2019-01-05
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多