接口请求
Qt PySide2自带的网络请求,使用起来不太方便。
个人更喜欢使用httpx进行网络请求。
https://www.psvmc.cn/article/2021-11-26-python-httpx.html
工具类
1 | from urllib.parse import urlencode |
注意
参数定义位dict,qml传入的对象是获取不到的,所以才用的字符串。
使用方式
1 | from utils.z_api_manager import NetworkManager |
qml
1 | Component.onCompleted: { |
TLS初始化失败
在使用Qt5.15.2请求https资源时遇到TLS初始化失败
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
原因
Qt本身是支持ssl的,但是因为法律原因?没有自带对应的dll。
解决方法包括检查并确保QT版本与libea32.dll和ssleay32.dll库版本一致,从QT安装目录的Tools文件夹中找到这两个文件,然后将其复制到应用程序的同级目录下,完成此操作后问题得以解决。
我们可以查看SSL是否支持,及对应版本
1 | from PySide2.QtNetwork import (QNetworkAccessManager, QNetworkRequest,QSslSocket) |
我这里结果是
r1:False
r2:OpenSSL 1.1.1g 21 Apr 2020
下载后安装即可(注意要和程序的位数一致)
OpenSSL-1.1.1g_64位安装包.zip
https://pan.baidu.com/s/1JdjKpafN3qTPzZYRv5VtBQ?pwd=3732
注意
python是32位还是64位要和DLL的位数一致。
安装到第二个选项时:
可以选择第一项这样就能直接使用了。
也可以选择第二项,再把DLL(libcrypto-1_1-x64.dll
和libssl-1_1-x64.dll
)放在运行环境中。
- 如果用的是mingw,拷贝到QT编译器目录下即可(
Qt\5.15.2\mingw81_64\bin
)。 - 如果使用的python就放在所用解析器的同级目录。