QT如何使用SSL发送https

Qt How sent post HTTPS with SSL

本文关键字:发送 https SSL 何使用 QT      更新时间:2023-10-16

qt如何使用SSL发送简单的帖子https?
该程序应该使用qnetworkAccessManager通过HTTPS发送帖子。
以下是我代码的简单示例。

QUrlQuery params;
QByteArray dane;
params.addQueryItem("mWyslijpost", ui->lineEdit->text());
dane.append(params.toString());

QUrl url("https://81.2.244.83/Testpostssl/infotest.php");

QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
QNetworkReply *reply = manager->post(request, dane);

QFile certFile(":/crt/cert.crt");
Q_ASSERT(certFile.open(QIODevice::ReadOnly));
QSslCertificate cert(&certFile, QSsl::Pem);
QSslSocket * sslSocket = new QSslSocket(this);
sslSocket->addCaCertificate(cert);
sslSocket->connectToHostEncrypted(SERVER,  443);
if (!sslSocket->waitForEncrypted())
{
    qDebug() << "Info " << sslSocket->errorString();
    return false;
}
QSslConfiguration config = sslSocket->sslConfiguration();
config.setProtocol(QSsl::TlsV1_2);
sslSocket->setSslConfiguration(config);
reply->setSslConfiguration(config);

// wait
QEventLoop elCzekaj;
connect(reply, SIGNAL(finished()), &elCzekaj, SLOT(quit()));
elCzekaj.exec();

if(reply->error() == QNetworkReply::NoError)
{
    qDebug() << reply->readAll();
 }
else
{
    qDebug() << "Error...";
    qDebug() << reply->errorString();
}

如何从服务器下载证书?如何配置QSSL?

从对等方获得证书,请尝试这样的事情:

QSslSocket *socket = new QSslSocket();
QObject::connect(socket,
                 &QSslSocket::encrypted,
                 [=](){qDebug() << socket->peerCertificate() << " cert";}
);
socket->connectToHostEncrypted("stackoverflow.com", 443);

关于问题:"如何配置QSSL",这取决于您想做什么。如果您只想通过TLS从Web服务器中获取某些内容,只需使用QnetworkAccessManager即可。那里的默认值会。