[英]How can i add a SSL Cert to my code in QT
我想要做的是向https://mapi.alipay.com/gateway.do发送 https 请求? 在 QT 中并得到响应。 每当我发送请求时,我都会收到以下错误。
qt.network.ssl: QSslSocket: 无法调用未解析的函数 SSLv23_client_method qt.network.ssl: QSslSocket: 无法调用未解析的函数 SSL_CTX_new qt.network.ssl: QSslSocket: 无法调用未解析的函数 SSL_library_init qt. callnetwork.slresolved: 无法调用函数 ERR_get_error qt.network.ssl:QSslSocket:无法调用未解决的函数 ERR_get_error 失败“创建 SSL 上下文时出错()”
有人告诉我我需要 SSL 证书,所以我使用了
openssl s_client -connect mapi.alipay.com:443 -showcerts
拿到证书。 但每当
如何在 QT 中将 SSL 证书添加到我的项目代码中?
#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
#include <QFile>
#include <QSslSocket>
void sendRequest();
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
sendRequest();
return a.exec();
}
void sendRequest(){
// create custom temporary event loop on stack
QEventLoop eventLoop;
// "quit()" the event-loop, when the network request "finished()"
QNetworkAccessManager mgr;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
// the HTTP request
QNetworkRequest req( QUrl( QString("https://mapi.alipay.com/gateway.do/_input_charset=UTF-8¤cy=USD¬ify_url=10.237.221.84:80&out_trade_no=123456789&partner=2088101122136241&sign=760bdzec6y9goq7ctyx96ezkz78287de&subject=Coke&sign_type=MD5&service=create_forex_trade&total_fee=0.01") ) );
QNetworkReply *reply = mgr.get(req);
eventLoop.exec(); // blocks stack until "finished()" has been called
if (reply->error() == QNetworkReply::NoError) {
//success
qDebug() << "Success" <<reply->readAll();
delete reply;
}
else {
//failure
qDebug() << "Failure" <<reply->errorString();
delete reply;
}
}
要将其他 SSL 证书添加到 Qt 程序,您可以使用:
QSslSocket::addDefaultCaCertificates("example.pem");
但是,我认为这不能解决您的任何错误。 您问题中的错误与缺少 SSL 证书无关,而是与缺少 SSL 功能有关。 您可能使用的是过时的 SSL 库? (例如,Windows 上较旧或不兼容的 libeay32.dll 和 ssleay32.dll 版本?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.