Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Sending parameters by get method to rest api
Forum Updated to NodeBB v4.3 + New Features

Sending parameters by get method to rest api

Scheduled Pinned Locked Moved Solved General and Desktop
40 Posts 5 Posters 5.4k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ali-aydinA ali-aydin

    I need to send parameters to Rest API by the get methods
    i can get token and make authenticate but in sending other parameters there is some problems.my code is like this:

     QUrl url("http://localhost:59444/api/Getmojodi");
        QNetworkRequest req1;
        const QByteArray basic_authorization =token.toUtf8().toBase64();
        req1.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
        QUrlQuery uq;
        uq.addQueryItem("KalaCode","20101010131310");
        url.setQuery(uq);
        req1.setUrl(url);
        QNetworkReply *rep= manager->get(req1);
        QString val = rep->readAll();
        QJsonDocument jDoc=QJsonDocument::fromJson(val.toUtf8());
        QJsonObject obj = jDoc.object();
        qDebug()<<obj["mojodi"].toString();//is empty.
    
    Axel SpoerlA Offline
    Axel SpoerlA Offline
    Axel Spoerl
    Moderators
    wrote on last edited by Axel Spoerl
    #6

    @ali-aydin said in Sending parameters by get method to rest api:
    If you want your code to block until the reply has arrived, create an event loop on the stack, connect the network reply's finished signal to the quit slot of the event loop and exec() it.

    QUrl url("http://localhost:59444/api/Getmojodi");
      QNetworkRequest req1;
      const QByteArray basic_authorization =token.toUtf8().toBase64();
      req1.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
      QUrlQuery uq;
      uq.addQueryItem("KalaCode","20101010131310");
      url.setQuery(uq);
      req1.setUrl(url);
      QNetworkReply *rep= manager->get(req1);
      // blocking code starts here
      QEventLoop loop;
      QObject::connect(rep, &QNetworkReply::finished, &loop, &QEventLoop::quit);
      loop.exec();
      // end of blocking code
      QString val = rep->readAll();
      QJsonDocument jDoc=QJsonDocument::fromJson(val.toUtf8());
      QJsonObject obj = jDoc.object();
      qDebug()<<obj["mojodi"].toString();//is empty.
    

    Software Engineer
    The Qt Company, Oslo

    ali-aydinA 1 Reply Last reply
    1
    • Axel SpoerlA Axel Spoerl

      @ali-aydin said in Sending parameters by get method to rest api:
      If you want your code to block until the reply has arrived, create an event loop on the stack, connect the network reply's finished signal to the quit slot of the event loop and exec() it.

      QUrl url("http://localhost:59444/api/Getmojodi");
        QNetworkRequest req1;
        const QByteArray basic_authorization =token.toUtf8().toBase64();
        req1.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
        QUrlQuery uq;
        uq.addQueryItem("KalaCode","20101010131310");
        url.setQuery(uq);
        req1.setUrl(url);
        QNetworkReply *rep= manager->get(req1);
        // blocking code starts here
        QEventLoop loop;
        QObject::connect(rep, &QNetworkReply::finished, &loop, &QEventLoop::quit);
        loop.exec();
        // end of blocking code
        QString val = rep->readAll();
        QJsonDocument jDoc=QJsonDocument::fromJson(val.toUtf8());
        QJsonObject obj = jDoc.object();
        qDebug()<<obj["mojodi"].toString();//is empty.
      
      ali-aydinA Offline
      ali-aydinA Offline
      ali-aydin
      wrote on last edited by
      #7

      @Axel-Spoerl
      Thanks for your help
      but it is not ok not only this case but also I changed the code a bit
      but is not ok yet
      changed code:

          QUrl url("http://localhost:59444/api/Getmojodi");
          QNetworkRequest req1;
          const QByteArray basic_authorization =token.toUtf8().toBase64();
          req1.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
          QUrlQuery uq;
          uq.addQueryItem("KalaCode","20101010131310");
          url.setQuery(uq);
          req1.setUrl(url);
          QNetworkReply *rep= manager->get(req1);
          // blocking code starts here
          QEventLoop loop;
          QTimer timer;
          timer.setSingleShot(true);
      
          QObject::connect(&timer,&QTimer::timeout,&loop,&QEventLoop::quit);
          QObject::connect(rep, &QNetworkReply::finished, &loop, &QEventLoop::quit);
          timer.start(5000);
          loop.exec();
          // end of blocking code
          if(!timer.isActive())
          {
          QString val = rep->readAll();
          QJsonDocument jDoc=QJsonDocument::fromJson(val.toUtf8());
          QJsonObject obj = jDoc.object();
          qDebug()<<val;//obj["mojodi"].toString();
          }
      
      JonBJ 1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #8

        You are not doing any error management so you can't know what is happening.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        ali-aydinA 1 Reply Last reply
        1
        • ali-aydinA ali-aydin

          @Axel-Spoerl
          Thanks for your help
          but it is not ok not only this case but also I changed the code a bit
          but is not ok yet
          changed code:

              QUrl url("http://localhost:59444/api/Getmojodi");
              QNetworkRequest req1;
              const QByteArray basic_authorization =token.toUtf8().toBase64();
              req1.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
              QUrlQuery uq;
              uq.addQueryItem("KalaCode","20101010131310");
              url.setQuery(uq);
              req1.setUrl(url);
              QNetworkReply *rep= manager->get(req1);
              // blocking code starts here
              QEventLoop loop;
              QTimer timer;
              timer.setSingleShot(true);
          
              QObject::connect(&timer,&QTimer::timeout,&loop,&QEventLoop::quit);
              QObject::connect(rep, &QNetworkReply::finished, &loop, &QEventLoop::quit);
              timer.start(5000);
              loop.exec();
              // end of blocking code
              if(!timer.isActive())
              {
              QString val = rep->readAll();
              QJsonDocument jDoc=QJsonDocument::fromJson(val.toUtf8());
              QJsonObject obj = jDoc.object();
              qDebug()<<val;//obj["mojodi"].toString();
              }
          
          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by
          #9

          @ali-aydin said in Sending parameters by get method to rest api:

          but is not ok yet

          if(!timer.isActive())

          qDebug()<<val;

          ... and additionally to @SGaist why not tell us whether it times out or what it outputs?

          1 Reply Last reply
          0
          • SGaistS SGaist

            You are not doing any error management so you can't know what is happening.

            ali-aydinA Offline
            ali-aydinA Offline
            ali-aydin
            wrote on last edited by
            #10

            @SGaist
            there is not error
            because I can get token and make authorization

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #11

              Authentication, authorization and request management are three different stages that all can fail separately. The fact that you can authenticate does not mean that everything else is working.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              ali-aydinA 1 Reply Last reply
              0
              • SGaistS SGaist

                Authentication, authorization and request management are three different stages that all can fail separately. The fact that you can authenticate does not mean that everything else is working.

                ali-aydinA Offline
                ali-aydinA Offline
                ali-aydin
                wrote on last edited by
                #12

                @SGaist
                so how does it work?
                I can not find any way.

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #13

                  The best place is the documentation: QNetworkReply::errorOccured.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  ali-aydinA 1 Reply Last reply
                  2
                  • SGaistS SGaist

                    The best place is the documentation: QNetworkReply::errorOccured.

                    ali-aydinA Offline
                    ali-aydinA Offline
                    ali-aydin
                    wrote on last edited by ali-aydin
                    #14

                    @SGaist
                    @Axel-Spoerl
                    I changed slot that connected to finish signal like this :

                    QByteArray bytes = R->readAll();
                        QString str = QString::fromUtf8(bytes.data(), bytes.size());
                        int statusCode = R->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
                        qDebug() << QVariant(statusCode).toString();
                    

                    and return 403 code it means forbidden.why?

                    1 Reply Last reply
                    0
                    • Axel SpoerlA Offline
                      Axel SpoerlA Offline
                      Axel Spoerl
                      Moderators
                      wrote on last edited by
                      #15

                      403 is what your server sends. It means that your parameters are incorrect or the server itself has (due to misconfiguration) no access to the requested resource.
                      Have you tried the call with postman or a browser?

                      Software Engineer
                      The Qt Company, Oslo

                      ali-aydinA 1 Reply Last reply
                      0
                      • Axel SpoerlA Axel Spoerl

                        403 is what your server sends. It means that your parameters are incorrect or the server itself has (due to misconfiguration) no access to the requested resource.
                        Have you tried the call with postman or a browser?

                        ali-aydinA Offline
                        ali-aydinA Offline
                        ali-aydin
                        wrote on last edited by
                        #16

                        @Axel-Spoerl
                        Yes I tried by postman and is ok

                        JonBJ 1 Reply Last reply
                        0
                        • ali-aydinA ali-aydin

                          @Axel-Spoerl
                          Yes I tried by postman and is ok

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #17

                          @ali-aydin
                          Your platform/web server may/should have the ability to log all requests/responses to a log file? You might switch that on and see if anything helpful there?

                          ali-aydinA 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @ali-aydin
                            Your platform/web server may/should have the ability to log all requests/responses to a log file? You might switch that on and see if anything helpful there?

                            ali-aydinA Offline
                            ali-aydinA Offline
                            ali-aydin
                            wrote on last edited by
                            #18

                            @JonB
                            OS is Windows 10 and qt 5.15.2

                            JonBJ 1 Reply Last reply
                            0
                            • ali-aydinA ali-aydin

                              @JonB
                              OS is Windows 10 and qt 5.15.2

                              JonBJ Offline
                              JonBJ Offline
                              JonB
                              wrote on last edited by
                              #19

                              @ali-aydin Look in your web server's documentation.

                              ali-aydinA 1 Reply Last reply
                              0
                              • JonBJ JonB

                                @ali-aydin Look in your web server's documentation.

                                ali-aydinA Offline
                                ali-aydinA Offline
                                ali-aydin
                                wrote on last edited by
                                #20

                                @JonB
                                API's documentation?

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  mchinand
                                  wrote on last edited by
                                  #21

                                  I think you have to add 'Basic ' before your token when you set the Authorization header (or 'Bearer ' if you are doing bearer token auth). If things are working in Postman, check the 'Headers' tab of your request as to what is the actual value being sent for the Authorization.

                                  ali-aydinA 1 Reply Last reply
                                  0
                                  • M mchinand

                                    I think you have to add 'Basic ' before your token when you set the Authorization header (or 'Bearer ' if you are doing bearer token auth). If things are working in Postman, check the 'Headers' tab of your request as to what is the actual value being sent for the Authorization.

                                    ali-aydinA Offline
                                    ali-aydinA Offline
                                    ali-aydin
                                    wrote on last edited by ali-aydin
                                    #22

                                    @mchinand
                                    Bearer must be added to the token.
                                    in postman there is no header
                                    in authorization tab
                                    only added token and in parameters tab is only one parameter :KalaCode
                                    in body tab username,password and grant_type
                                    in the qt when I want to authenticate by

                                    QUrl url("http://localhost:594444/api/authenticate");
                                    

                                    it returns "Hello"
                                    but when i changing url to

                                    QUrl url("http://localhost:594444/api/Getmojodi" );
                                    

                                    it does not work

                                    1 Reply Last reply
                                    0
                                    • M Offline
                                      M Offline
                                      mchinand
                                      wrote on last edited by mchinand
                                      #23

                                      I meant the 'Headers' tab of the Postman request:
                                      b0973db6-0abc-4a60-9d8e-5e0955d007f9-image.png

                                      The authorization header value above was automatically set when I added a (junk) username and password in the Auth tab:

                                      a33e651c-8868-47c3-b96e-f7569e008cc0-image.png

                                      ali-aydinA 1 Reply Last reply
                                      0
                                      • M mchinand

                                        I meant the 'Headers' tab of the Postman request:
                                        b0973db6-0abc-4a60-9d8e-5e0955d007f9-image.png

                                        The authorization header value above was automatically set when I added a (junk) username and password in the Auth tab:

                                        a33e651c-8868-47c3-b96e-f7569e008cc0-image.png

                                        ali-aydinA Offline
                                        ali-aydinA Offline
                                        ali-aydin
                                        wrote on last edited by
                                        #24

                                        @mchinand
                                        there is no problem in postman
                                        problem is that how can we do authorization in qt?
                                        i think yhe main problem is this

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          mchinand
                                          wrote on last edited by
                                          #25

                                          Are you setting the Authorization the same in Qt as the value it is set in Postman? Your variables are 'basic_authorization' and 'token', is token just the token or is the token type prepended to it ('Basic ' or 'Bearer ')? Your variable is 'basic_authorization' but in your prior message, you mention adding 'Bearer' before the token, which auth method are you using?

                                          ali-aydinA 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved