Python 3.x Kivy URL请求与https
我正在尝试获取Python3.7Kivy代码,以使用UrlRequest检索https web数据。代码可以很好地使用http,但是当我将url更改为任何https时,都不会得到任何数据。当我同时使用http或https编译和运行时,这两种方式都不会出错。是否需要添加导入以使https正常工作?这是测试代码。谢谢Python 3.x Kivy URL请求与https,python-3.x,https,kivy,urlrequest,Python 3.x,Https,Kivy,Urlrequest,我正在尝试获取Python3.7Kivy代码,以使用UrlRequest检索https web数据。代码可以很好地使用http,但是当我将url更改为任何https时,都不会得到任何数据。当我同时使用http或https编译和运行时,这两种方式都不会出错。是否需要添加导入以使https正常工作?这是测试代码。谢谢 from kivy.app import App from kivy.uix.button import Button from kivy.uix.gridlayout import
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.network.urlrequest import UrlRequest
from functools import partial
class MainApp(App):
def build(self):
grid = GridLayout(cols=1)
button1 = Button(text="Press to say Hello",
on_release=self.run_Hello)
button2 = Button(text="Kivy UrlRequest",
on_release=self.run_UrlRequests)
blank_button = Button(text="Click me!")
grid.add_widget(button1)
grid.add_widget(button2)
grid.add_widget(blank_button)
return grid
def run_Hello(self, *args):
print("Hello")
def run_UrlRequests(self, *args):
for i in range(10):
self.r = UrlRequest("https://www.google.com", verify=False,
on_success=partial(self.update_label, i),
on_error=partial(self.error_label, i))
def update_label(self, i, *args):
print(i)
print("success")
print(self.r.result)
def error_label(self, i, *args):
print("failed")
print(i)
print(self.r.result)
MainApp().run()
我在UrlRequest之后添加了verify=False,也添加到了原始代码中。代码运行并生成html数据的打印语句。虽然这解决了https问题,但我不知道这个明显的SSL问题是否得到了正确的解决 向我们展示您迄今为止所做的工作。我最近从Python2切换到Python3,并遇到了类似的错误。对我来说,根本的问题是UrlRequest不知道属性CA文件在哪里。为了解决这个问题,我导入了certifi模块
import certifi
,然后传递了ca\u file=certifi.where()
。正常的请求.get
使用的是https,但不是Kivy的UrlRequest
,不知道确切原因。使用verify=False
有点安全风险。这就解决了问题。找不到它的任何文档。非常感谢。顺便说一句:喜欢你的Kivy视频。我也不能,我花了很长时间才弄明白。也许我会专门为它做一个教程或帖子哈哈!谢谢你的支持!!
def run_UrlRequests(self, *args):
for i in range(10):
self.r = UrlRequest("https://www.google.com", verify=False,
on_success=partial(self.update_label, i), on_error=partial(self.error_label, i))