2017-06-02 62 views
0

Qt如何通过SSL发送简单的帖子HTTPS?
程序应该使用QNetworkAccessManager通过HTTPS发送帖子。
下面是我的代码的一个简单示例。Qt如何发送帖子HTTPS with SSL

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?

回答

0

为了得到同行的证书尝试这样的:

QSslSocket *socket = new QSslSocket(); 

QObject::connect(socket, 
       &QSslSocket::encrypted, 
       [=](){qDebug() << socket->peerCertificate() << " cert";} 
); 

socket->connectToHostEncrypted("stackoverflow.com", 443); 

关于这个问题:“如何配置QSSL”,这取决于你想要做什么。如果您只是想通过TLS从Web服务器获取某些内容,只需使用QNetworkAccessManager即可。这些默认值会做。