• QNetworkRequest加Authorization头,适应Rest风格的API


      Rest是无状态的。Rest的请求之间不应该有依赖,在调用一个请求前,不需要一定要去提前调用另外一个请求。Rest里面不应该有 session,特别是Rest请求不应该保存信息在sesssion里,以便在后面的调用中使用。甚至包括安全验证,客户端不应该需要提前登录,然后把 权限信息保存在session里,后面的请求用同一个session来调用。

    实现无状态的方法就是,把所有信息都包含在当前的请求中,包括验证信息。HTTP是无状态的,HTTP里有一个Authorization 头,HTTP的要求是在每次请求的时候都把验证信息放在里面,服务器每次处理请求前都去验证这个信息。为了安全,我们可以提供一个生成token的 Rest API,客户端调用这个API生成token(可以附上用户名/密码来生成token)。在后面的所有请求中都把这个token放在 Authentication头中。

      

    如下代码就是实现QNetworkRequest加Authorization头

       QString _url;//url

       QString _token;//token

     //

        QNetworkRequest mreq;
        QNetworkAccessManager *tnam = new QNetworkAccessManager();

        QEventLoop loop;
        QObject::connect(tnam, SIGNAL(finished(QNetworkReply *)), &loop, SLOT(quit()));
        mreq.setUrl(QUrl(_url));
        mreq.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
        //
        QString token_headerData = "Token  " + _token;
        mreq.setRawHeader("Authorization", token_headerData.toLocal8Bit());
        //
        QNetworkReply* reply=tnam->get(mreq);
        loop.exec();
        QByteArray data=reply->readAll();

     ...

  • 相关阅读:
    C语言程序设计_zju——计算时间差
    C语言程序设计_zju——第1周编程练习_逆序的三位数
    常用CMD指令
    C#MVC Razor的Ajax.BeginForm里面的OnSuccess未执行(未成功跳转)
    发布带注释的dll
    读书笔记之《得未曾有》
    读书笔记之《高效人士的七个习惯》
    读书笔记之《好好说话》
    个人随笔之《关于选择》
    个人随笔之《关于心安》
  • 原文地址:https://www.cnblogs.com/falqs/p/3795444.html
Copyright © 2020-2023  润新知