c++ - 使用 Qt 进行 C++ 摘要身份验证
问题描述
我想问一个关于 c++ rest 库的问题。在这里,我想用 c++ 代码编写一个摘要认证。我正在使用 Qt 库。为了进行摘要身份验证,我需要从标头中获取 nonce 令牌。我正在尝试使用我的代码读取响应标头。下面的代码可以正常工作以获得响应,但“manager->head”不起作用。你能帮我吗,我怎样才能读取标题,所以我可以获得随机数令牌。
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);
解决方案
我已经以这种方式解决了问题;
我更喜欢以经典方式编写摘要认证。摘要认证有两个步骤。这些是接收随机数和发送用户名+密码+随机数组合。下面的代码是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);
推荐阅读
- javascript - 从 OpenLayers 坐标输出度分,但没有秒?
- react-native - React Native - 在另一个文件的数组中更改状态
- botframework - 将支付集成到聊天机器人中
- matlab - 具有 3d 条形和不同条形颜色的双变量直方图
- android - Gradle 同步时间过长 Firebase-core 无法 HEAD 状态码 409
- android - 在没有 Java 的情况下翻转矢量
- r - 第 1 列作为标签,第 2 列变量从 R 表中的第 1 列开始
- rust - 存储对自身的引用
- bitbucket - Bitbucket Markdown - 将表格添加到编号列表项
- selenium - 无法单击硒中的下拉按钮