【QT网络问题】关于QT在调用天气等类似api接口时报错
报错内容
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
Error: "TLS initialization failed"
问题原因
Openssl库不匹配或者未安装,可以通过qdebug版本打印当前所需要的的openssl库,自己去官网下载
qDebug()<< QSslSocket::sslLibraryBuildVersionString();
解决方案
由于目前主流的get请求都是https所以导致会出现这个问题,直接改为http请求即可,在QT中强制使用http请求不要用https即可解决问题,相关代码如下。
void WeatherFetcher:: fetchWeather() {
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
// 创建请求对象
QNetworkRequest request;
request.setUrl(QUrl(m_url)); // 设置 URL
// 配置 SSL
QSslConfiguration sslConfig = request.sslConfiguration();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(sslConfig);
// 发送请求
QNetworkReply *reply = manager->get(request);
connect(reply, &QNetworkReply::finished, this, [this, reply]() {
if (reply->error() == QNetworkReply::NoError) {
QByteArray response = reply->readAll();
parseWeatherData(response);
} else {
qDebug() << "Error:" << reply->errorString();
}
reply->deleteLater();
});
}