// 执行请求的辅助函数 void HttpClientPrivate::executeQuery(HttpClientPrivate *d, HttpMethod method, std::function<void (const QString &)> successHandler, std::function<void (const QString &)> errorHandler, const char *encoding) { // 如果不使用外部的 manager 则创建一个新的,在访问完成后会自动删除掉 bool debug = d->debug; bool internal; QNetworkAccessManager *manager = HttpClientPrivate::getManager(d, &internal); QNetworkRequest request = HttpClientPrivate::createRequest(d, method); QNetworkReply *reply = nullptr; switch (method) { case HttpClientPrivate::GET: reply = manager->get(request); break; case HttpClientPrivate::POST: reply = manager->post(request, d->useJson ? d->json.toUtf8() : d->params.toString(QUrl::FullyEncoded).toUtf8()); break; case HttpClientPrivate::PUT: reply = manager->put(request, d->useJson ? d->json.toUtf8() : d->params.toString(QUrl::FullyEncoded).toUtf8()); break; case HttpClientPrivate::DELETE: reply = manager->deleteResource(request); break; default: break; } QObject::connect(reply, &QNetworkReply::finished, [=] { QString successMessage = HttpClientPrivate::readReply(reply, encoding); // 请求结束时一次性读取所有响应数据 QString errorMessage = reply->errorString(); HttpClientPrivate::handleFinish(debug, successMessage, errorMessage, successHandler, errorHandler, reply, internal ? manager : nullptr); }); }
void HttpInterface::put(QUrl url, QByteArray data, HttpInterface *interface) { QNetworkAccessManager *manager = new QNetworkAccessManager(this); QByteArray *buffer = new QByteArray(); buffer->clear(); QNetworkRequest request; request.setHeader(QNetworkRequest::ContentTypeHeader, QString("text/xml")); request.setUrl(url); QNetworkReply *reply = manager->put(request,data); connect(reply,&QNetworkReply::readyRead,[=](){buffer->append(reply->readAll());}); connect(reply,&QNetworkReply::finished,[=](){finished(*buffer, interface);}); }