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