| 169 | } |
| 170 | |
| 171 | QList<Network::Reply> Network::httpGetBatch(const QStringList &urls, const QList<QUrlQuery> &queries, const QList<QStringList> &headers, bool redirect) |
| 172 | { |
| 173 | Q_ASSERT(urls.size()==queries.size() || queries.size()==0); |
| 174 | Q_ASSERT(urls.size()==headers.size() || headers.size()==0); |
| 175 | QList<Reply> results; |
| 176 | if (urls.isEmpty()) return results; |
| 177 | int finishCount=0; |
| 178 | QEventLoop eventLoop; |
| 179 | QNetworkAccessManager *manager(getManager()); |
| 180 | manager->setCookieJar(nullptr); |
| 181 | for(int i=0;i<urls.size();++i) |
| 182 | { |
| 183 | results.append(Reply()); |
| 184 | QUrl queryUrl(urls.at(i)); |
| 185 | if(!queries.isEmpty()) queryUrl.setQuery(queries.at(i)); |
| 186 | QNetworkRequest request; |
| 187 | request.setUrl(queryUrl); |
| 188 | request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, redirect); |
| 189 | request.setMaximumRedirectsAllowed(maxRedirectTimes); |
| 190 | |
| 191 | if(!headers.isEmpty()) |
| 192 | { |
| 193 | for(int j=0;j<headers[i].size();j+=2) |
| 194 | { |
| 195 | request.setRawHeader(headers[i][j].toUtf8(),headers[i][j+1].toUtf8()); |
| 196 | } |
| 197 | } |
| 198 | QNetworkReply *reply = manager->get(request); |
| 199 | QTimer *timer=new QTimer; |
| 200 | timer->setInterval(timeout*2); |
| 201 | timer->setSingleShot(true); |
| 202 | QObject::connect(timer, &QTimer::timeout,reply,&QNetworkReply::abort); |
| 203 | QObject::connect(getAbortFlag(), &ReqAbortFlagObj::abort, reply,&QNetworkReply::abort); |
| 204 | timer->start(); |
| 205 | QObject::connect(reply, &QNetworkReply::finished, reply, [i,&results,&finishCount,&eventLoop,reply,timer]() |
| 206 | { |
| 207 | if(timer->isActive()) |
| 208 | { |
| 209 | timer->stop(); |
| 210 | if(reply->error() == QNetworkReply::NoError) |
| 211 | { |
| 212 | results[i].hasError = false; |
| 213 | results[i].statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); |
| 214 | results[i].content = reply->readAll(); |
| 215 | results[i].headers = reply->rawHeaderPairs(); |
| 216 | } |
| 217 | else |
| 218 | { |
| 219 | results[i].hasError = true; |
| 220 | results[i].errInfo=reply->errorString(); |
| 221 | } |
| 222 | } |
| 223 | else |
| 224 | { |
| 225 | results[i].hasError = true; |
| 226 | results[i].errInfo=QObject::tr("Replay Timeout"); |
| 227 | } |
| 228 | reply->deleteLater(); |