简体   繁体   English

这是在 QNetworkAccessManager 中添加摘要 header 的正确方法吗

[英]Is that the right way to add digest header in QNetworkAccessManager

Could you help me about QNetworkAccessManager.你能帮我谈谈 QNetworkAccessManager 吗? I am trying to make an digest authentication in C++ QNetworkAccessManager, I couldn't a way to send the request without calculating the digest data.我正在尝试在 C++ QNetworkAccessManager 中进行摘要身份验证,我无法在不计算摘要数据的情况下发送请求。 So I am doing the request with calculating the md5.所以我正在通过计算 md5 来完成请求。 Does anybody know?有人知道吗? Is that the right way to add the header of digest response in QNetworkAccessManager.这是在 QNetworkAccessManager 中添加摘要响应的 header 的正确方法吗?

Thanks,谢谢,

  QString  G_username =  QString::fromUtf8(_userName.c_str());
  QString  G_realm = QString::fromUtf8(_realm.c_str());
  QString  G_nonce = QString::fromUtf8(_nonce.c_str());
  QString  G_uri = QString::fromUtf8(urlAfterIp.c_str());
  QString  G_response = QString::fromUtf8(ha3.c_str());
  QString  G_qop = QString::fromUtf8(_qop.c_str());
  QString  G_nc = QString::fromUtf8((_ncString).c_str());
  QString  G_cnonce = QString::fromUtf8(_cnonce.c_str());
    
  QEventLoop loop;
  QNetworkAccessManager* manager = new QNetworkAccessManager();
  QNetworkRequest networkRequest;
  networkRequest.setUrl(QUrl("http://172.16.101.68/reset"));

  //networkRequest.setRawHeader(QByteArray("Authorization"), digestValueToAdd.toUtf8());
  networkRequest.setRawHeader(QByteArray("Digest username"), G_username.toUtf8());
  networkRequest.setRawHeader(QByteArray("realm"), G_realm.toUtf8());
  networkRequest.setRawHeader(QByteArray("nonce"), G_nonce.toUtf8());
  networkRequest.setRawHeader(QByteArray("uri"), G_uri.toUtf8());
  
  networkRequest.setRawHeader(QByteArray("algorithm"), "MD5");
  networkRequest.setRawHeader(QByteArray("response"), G_response.toUtf8());
  networkRequest.setRawHeader(QByteArray("qop"), G_qop.toUtf8());
  networkRequest.setRawHeader(QByteArray("nc"), G_nc.toUtf8());
  networkRequest.setRawHeader(QByteArray("cnonce"), G_cnonce.toUtf8());

  QLabel *label = new QLabel();
  QNetworkReply *reply = manager->get(networkRequest);
     

  QObject::connect(reply, SIGNAL(readyRead()),
          label, SLOT(slotReadyRead()));
  QObject::connect(reply, SIGNAL(finished()),
          label, SLOT(slotOnRequestCompleted()));
  QObject::connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
          label, SLOT(slotOnRequestError(QNetworkReply::NetworkError)));
  QObject::connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
          label, SLOT(slotSslErrors(QList<QSslError>)));

  QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

  loop.exec();

  QByteArray dataReceived = reply->readAll();
  QString dataReply(dataReceived);
    

I solved the problem, right way of adding the digest header is:我解决了这个问题,添加摘要 header 的正确方法是:

 digestResponse = "Digest username=\"" + _userName  + "\"" + ", realm=\"" + _realm 
    + 
    "\"" + ", nonce=\"" + _nonce + "\""
                   + ", uri=\"" + urlAfterIp +"\"" + ", algorithm=MD5" + ", response=" 
    + 
    "\"" + ha3  +"\"" + ", qop=" + _qop + ", nc="
                   + _ncString + ", cnonce=\"" +_cnonce + "\"";



   QEventLoop loop;

   QNetworkAccessManager* manager = new QNetworkAccessManager();
   QNetworkRequest networkRequest;
   networkRequest.setUrl(QUrl("http://172.16.101.68/reset"));

   networkRequest.setRawHeader("Authorization", digestResponse.c_str());

 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM