微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决这是在 QNetworkAccessManager 中添加摘要标头的正确方法吗

你能帮我了解一下 QNetworkAccessManager。我正在尝试在 C++ QNetworkAccessManager 中进行摘要身份验证,我无法在不计算摘要数据的情况下发送请求。所以我正在通过计算 md5 来做请求。有人知道吗?这是在 QNetworkAccessManager 中添加摘要响应标头的正确方法吗。

谢谢,

  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()),SLOT(slotOnRequestCompleted()));
  QObject::connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),SLOT(slotOnRequestError(QNetworkReply::NetworkError)));
  QObject::connect(reply,SIGNAL(sslErrors(QList<QSslError>)),SLOT(slotSslErrors(QList<QSslError>)));

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

  loop.exec();

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

解决方法

我解决了这个问题,添加摘要标题的正确方法是:

 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());

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。