0 问题
-
1,发现的问题:
在桌面端测试,发现可以正常post请求,但是在Android端运行时,就发现post请求发出去,也收不到信息。由于在真机上进行测试,不能打QDebug调试信息,于是只能把错误直接打印在控件上。 -
2,打印出错信息的方法:
事件:
QNetworkAccessManager* networkAccessManager;
connect(networkAccessManager, &QNetworkAccessManager::finished,
this, &MainWindow::replyFinisheded);
接受post请求的槽函数
void MainWindow::replyFinisheded(QNetworkReply *reply){
ui->label_3->setText("reply error:" + reply->errorString());
}
- 3, 曝出的异常
error TLS initialization
- 4,测试是否有用的openSSL版本
qDebug() << QSslSocket::supportsSsl()//是否支持,不支持就说明没有openSSL
<< QSslSocket::sslLibraryBuildVersionString()//运行时需要的版本
<< QSslSocket::sslLibraryVersionString();//可用的版本
1 解决方法
-
1,下载安装Android的openSSL
地址
然后自己导入,也可以选择Download OpenSSL的按钮,自动下载导入。
安装成功的话,选择全部选项打勾。(如果是windwos的也可以下载windwos版本的、
openssl官网)
-
2,打开Qt的项目中,选择
Include prebulid openSSL libraries
的选项,
在.pro文件中会自动生成下面代码,也可以手动自己在pro文件中添加代码
android: include(/Users/mac/android-sdk/android_openssl/openssl.pri)
ANDROID_EXTRA_LIBS = /Users/mac/android-sdk/android_openssl/latest/arm/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm64/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm64/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86_64/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86_64/libssl_1_1.so
按下ctr/Command + B后进行编译,会自动生成下面的代码
然后就可以愉快的进行https的请求了。
2 小知识
因为openSSL为开源的加密软件,有些地方涉及这方面需要得到批准,因此Qt并不会自动帮我们链接openSSL程序。
Import and Export Restrictions
Qt binary installers include the OpenSSL
libraries used by QtNetwork.
However, those are not automatically deployed with
applications that are built with Qt.
Import and export restrictions apply for
some types of software, and for some parts of the world.
Developers wishing to use SSL communication in their deployed
applications should either ensure that their users have the
appropriate libraries installed, or they should consult a s
uitably qualified legal professional to ensure that
applications using code from the OpenSSL project are correctly
certified for import and export in relevant regions of the world.
参考:https://blog.csdn.net/BadAyase/article/details/103905615?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
3 windows下安装
- 1 把文件夹中的两个文件拷贝到运行文件exe的目录下,即可
4 Linux下使用
一开是我直接运行程序时,曝出的错误为:
测试使用的代码为:
qDebug() << "Is SSL Enabled? " << QSslSocket::supportsSsl();
qDebug() << "SSL Library Build Version (Qt compiled against): " << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "SSL Library Version String (available locally): " << QSslSocket::sslLibraryVersionString();
解决方法:找到自己Qt安装目录下的ssl库(在Qt的目录下面)
在.pro文件中,引入动态连接库:
LIBS += -L/opt/Qt/Tools/OpenSSL/binary/lib -lcrypto # -libssl
然后,解决问题,nice!