私はqt/c ++から始めて、プロジェクトでjson post/get/putを作成する必要がありますが、単純なgetリクエストを実行しようとしていますが、エラーがあります:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
理由はわかりませんが、いくつかの方法を試しましたが、すべて同じメッセージが表示されました。使用するコードを添付します。
mainwindow.cpp:
void MainWindow::replyFini(QNetworkReply* reply)
{
QString answer = QString::fromUtf8(reply->readAll());
qDebug() << "answer------------>"<<answer;
}
void MainWindow::on_btn_login_clicked()
{
QNetworkRequest request(QUrl("https://httpbin.org/get"));
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFini(QNetworkReply*)));
manager->get(request);
}
mainwindow.h:
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkReply>
SSLライブラリが見つかりません。エラーは Qt Src で読み取ることができます。それらをアプリケーションと共にデプロイするか、マシンにOpenSSLをインストールします。
また、ほんの小さなヒント:
_void MainWindow::replyFini(QNetworkReply* reply)
{
QString answer = QString::fromUtf8(reply->readAll());
qDebug() << "answer------------>"<<answer;
}
_
reply->deleteLater();
を呼び出す必要があります
_void MainWindow::on_btn_login_clicked()
{
QNetworkRequest request(QUrl("https://httpbin.org/get"));
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFini(QNetworkReply*)));
manager->get(request);
}
_
connect(manager, &QNetworkAccessManager::finished, manager, &QNetworkAccessManager::deleteLater);
を追加して、クリックごとのメモリリークを回避します。
Windowsでは、オンラインインストーラーを介してQtをインストールする場合、オプションのコンポーネントとしてOpenSSL Toolkitを選択できます。これにより、Qtと完全に互換性のあるバージョンが提供されます。
インストール時にチェックしていない場合は、C:\Qt\MaintenanceTool.exe
を再実行して、[コンポーネントの追加または削除]を選択できます。 OpenSSL Toolkitは、Developer and Designer Toolsセクションの下にあり、これが最後のエントリです。
ただし、サイドバーにメモがあります。
QtインストーラーはOpenSSL環境をセットアップしません。ユーザーはパスと環境変数を定義する必要があります。
したがって、インストールしたら、DLLのあるディレクトリをPATH環境変数に追加するか、必要なDLLを.exe
ファイルの近くに配置する必要があります(それらをdebug
およびrelease
ディレクトリにコピーします)あなたのプロジェクト)。
ディレクトリはC:\Qt\Tools\OpenSSL\Win_x64\bin
(32ビットバージョンが必要な場合はWin_x86
)にあります。 DLLは、私の場合、libssl-1_1-x64.dll
およびlibcrypto-1_1-x64.dll
という名前です。
しかし、これを別のマシンにデプロイするには不十分で、すべてコピーした後、同じエラーが再び発生しました。その理由は、OpenSSL DLLがQtアプリ自体とは別のMSVCランタイムバージョンに依存しており、これらのエラーが報告されないためです。これらのDLLを Dependency Walker で開いて、欠落しているものを見つけます。私の場合はMSVCR100.dll
だったので、 MSVC 2010再頒布可能x64 ( x86はこちら )をインストールする必要がありました。
私にとってうまくいったのは https://slproweb.com/products/Win32OpenSSL.html OpenSSLライトバージョン(私のコンパイラ用)からダウンロードし、c:\ Program Filesからlibcryptoおよびlibssl DLLをコピーすることでした。\OpenSSL \をプログラムの.exeフォルダーに追加します。