[英]C++ digest authentication with Qt
我想问一个关于 c++ rest 库的问题。 在这里,我想用c++代码编写一个摘要认证。 我正在使用 Qt 库。 为了进行摘要认证,我需要从 header 中获取 nonce 令牌。 我正在尝试用我的代码读取响应 header 。 下面的代码可以正常工作以获得响应,但“manager->head”不起作用。 你能帮我吗,我怎样才能读取 header,这样我才能得到 nonce 令牌。
QNetworkRequest request1;
request1.setUrl(QUrl("http://172.16.101.68/reset"));
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkReply*reply = manager->get(request1);
//QNetworkReply*reply = manager->head(request1); this is not working
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QByteArray data1 = reply->readAll();
QString dataReply(data1);
Thanks,
我已经以这种方式解决了问题;
我更喜欢以经典方式编写摘要认证。 摘要认证有两个步骤。 这些是接收随机数和发送用户名+密码+随机数组合。 下面的代码是c++ QnetworkAccessManager中发送密码、用户名、nonce的部分。
digestResponse = "Digest username=\"" + _userName + "\"" + ", realm=\"" + _realm +
"\"" + ", nonce=\"" + _nonce + "\""
+ ", uri=\"" + urlAfterIp +"\"" + ", algorithm=MD5" + ", response="
+ "\"" + ha3 +"\"" + ", qop=" + _qop + ", nc="
+ _ncString + ", cnonce=\"" +_cnonce + "\"";
//setting the variables.............
QEventLoop loop;
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest networkRequest;
networkRequest.setUrl(QUrl("http://172.16.101.68/reset"));
networkRequest.setRawHeader("Authorization", digestResponse.c_str());
QObject *a = new QObject();
QNetworkReply *reply = manager->get(networkRequest);
QObject::connect(reply, SIGNAL(readyRead()),
a, SLOT(slotReadyRead()));
QObject::connect(reply, SIGNAL(finished()),
a, SLOT(slotOnRequestCompleted()));
QObject::connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
a, SLOT(slotOnRequestError(QNetworkReply::NetworkError)));
QObject::connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
a, SLOT(slotSslErrors(QList<QSslError>)));
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QByteArray dataReceived = reply->readAll();
QString dataReply(dataReceived);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.