В чем проблема в моем клиентском коде Restapi или настройке - PullRequest
1 голос
/ 15 апреля 2020

Я сделаю библиотеку rest api таким же restsharp, используя qt. Я сделал тестовый код для Http Get Request, но он не работал, чем я следовал сообщению об ошибке, я установил openssl в окне и переустановил набор инструментов oppenssl, используя инструмент qt maintenace, но я не могу получить ответные данные, затем я проверил настройки oppenssl, URL, код и API

Все нормально

main. cpp

#include <QQmlApplicationEngine>
#include "restmanager.h"

int main(int argc, char *argv[])
{
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

   QGuiApplication app(argc, argv);
   QQmlApplicationEngine engine;

   RestManager* rest = new RestManager();
   rest->ConnectServer();

   const QUrl url(QStringLiteral("qrc:/main.qml"));
   QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                    &app, [url](QObject *obj, const QUrl &objUrl) {
       if (!obj && url == objUrl)
           QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

restmanager.h

#ifndef RESTMANAGER_H
#define RESTMANAGER_H

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>

class RestManager
{
public:
    RestManager();
    template<class T>
    T GetData();
    void ConnectServer(QString url);
    void ConnectServer();
private:
    QNetworkAccessManager manager;

};

#endif // RESTMANAGER_H

restmanager. cpp

#include "restmanager.h"

RestManager::RestManager(){

}

template<class T>
T RestManager::GetData(){

}

void RestManager::ConnectServer(QString url){

}

void RestManager::ConnectServer(){
   QUrl myurl;
   myurl.setScheme("https");
   myurl.setHost("kr.api.riotgames.com");
   myurl.setPath("/lol/summoner/v4/summoners/by-name/xaml");

   QUrlQuery query;
   query.addQueryItem("api_key", "RGAPI-bdb3dde5-2112-44c0-a1e8-532b9f86e9d1");

   myurl.setQuery(query);

   qDebug() << "URL : " << myurl.toString();

   QNetworkRequest request;
   request.setUrl(myurl);
   request.setRawHeader("Content-Type", "application/json");


   QNetworkReply *reply = manager.get(request);

   qDebug() << "DATA : " << reply->readAll();
}

результат

URL: "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/myname?api_key=myapikey"

ДАННЫЕ: ""

Нормальный результат запроса

{
   "id":"myid",
   "accountId":"myaccountid",
   "puuid":"mypuuid",
   "name":"myname",
   "profileIconId":3799,
   "revisionDate":1586869853000,
   "summonerLevel":183
}

если я пропустил ошибку, пожалуйста, ответьте или Вы можете сказать мне правильный путь?

1 Ответ

0 голосов
/ 15 апреля 2020

Мои умственные способности c предполагают, что вам нужно сделать следующее:

QNetworkReply *reply = manager.get(request);

while (reply->isFinished() == false) {
    // sleep a half second or so
}
qDebug() << "DATA : " << reply->readAll();

Или, предпочтительно, установить законченное соединение сигнала / слота события с объектом запроса:
https://doc.qt.io/qt-5/qnetworkreply.html#finished

Пример кода здесь: https://www.bogotobogo.com/Qt/Qt5_Downloading_Files_QNetworkAccessManager_QNetworkRequest.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...