| 20 | } |
| 21 | |
| 22 | Network::Reply Network::httpGet(const QString &url, const QUrlQuery &query, const QStringList &header, bool redirect) |
| 23 | { |
| 24 | QUrl queryUrl(url); |
| 25 | if(!query.isEmpty()) queryUrl.setQuery(query); |
| 26 | QNetworkRequest request; |
| 27 | request.setUrl(queryUrl); |
| 28 | if(header.size()>=2) |
| 29 | { |
| 30 | Q_ASSERT((header.size() & 1) ==0); |
| 31 | for(int i=0;i<header.size();i+=2) |
| 32 | { |
| 33 | request.setRawHeader(header[i].toUtf8(),header[i+1].toUtf8()); |
| 34 | } |
| 35 | } |
| 36 | request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, redirect); |
| 37 | request.setMaximumRedirectsAllowed(maxRedirectTimes); |
| 38 | |
| 39 | QNetworkAccessManager *manager = getManager(); |
| 40 | manager->setCookieJar(nullptr); |
| 41 | |
| 42 | QTimer timer; |
| 43 | timer.setInterval(timeout); |
| 44 | timer.setSingleShot(true); |
| 45 | QNetworkReply *reply = manager->get(request); |
| 46 | |
| 47 | QEventLoop eventLoop; |
| 48 | QObject::connect(getAbortFlag(), &ReqAbortFlagObj::abort, &eventLoop, &QEventLoop::quit); |
| 49 | QObject::connect(&timer, &QTimer::timeout, &eventLoop, &QEventLoop::quit); |
| 50 | QObject::connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit); |
| 51 | timer.start(); |
| 52 | eventLoop.exec(); |
| 53 | Reply replyObj; |
| 54 | if (timer.isActive()) |
| 55 | { |
| 56 | timer.stop(); |
| 57 | if (reply->error() == QNetworkReply::NoError) |
| 58 | { |
| 59 | replyObj.hasError = false; |
| 60 | replyObj.statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); |
| 61 | replyObj.content = reply->readAll(); |
| 62 | replyObj.headers = reply->rawHeaderPairs(); |
| 63 | } |
| 64 | else |
| 65 | { |
| 66 | replyObj.hasError = true; |
| 67 | replyObj.errInfo=reply->errorString(); |
| 68 | } |
| 69 | } |
| 70 | else |
| 71 | { |
| 72 | QObject::disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit); |
| 73 | reply->abort(); |
| 74 | replyObj.hasError = true; |
| 75 | replyObj.errInfo=QObject::tr("Replay Timeout"); |
| 76 | } |
| 77 | reply->deleteLater(); |
| 78 | return replyObj; |
| 79 | } |