項目中使用https抓天氣數據,在測試環境使用正常,客戶機部分電腦無法使用,部分電腦正常。
開始以爲JSON解析出錯,於是:
QJsonParseError err; //判斷是否爲cjson數據
WriteFile( err.errorString(),"C:/error.txt");
在客戶機上運行後返回:illegal value
根據錯誤回去檢查JSON數據
QJsonDocument doc = QJsonDocument::fromJson(buf.toUtf8(),&err);
WriteFile( QString(doc.toJson()),"C:/error.txt");
驚訝的發現數據爲空,抱着懷疑去查看了 QNetworkReply 的回覆值
QString buf = reply->readAll(); //cJSON數據放入緩衝區,定義爲字符串
WriteFile( buf,"C:/error.txt");
WriteFile( reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).value<QString>(),"C:/error.txt");
果然發現應答爲空,立即打印錯誤信息
WriteFile( reply->errorString(),"C:/error.txt");
提示 error creating ssl context()
考慮到在測試環境使用正常,客戶機部分電腦無法使用,部分電腦正常等原因,可能是windows系統缺少openssl的原因,後在項目中增加了判斷,內容如下:
if (!QSslSocket::supportsSsl()) {
QMessageBox::information(NULL, "warning", "notSupportsSsl", QMessageBox::Yes);
}
經在客戶環境下測試確認了是這個原因。就去下載了OpenSSL並安裝到系統中,軟件可以正常使用。
Win32/Win64 OpenSSL Screenshot下載地址
在安裝時需要注意要複製到windows system directory,其他安裝選擇默認即可。