QNetworkAccessManager - Как отправить запрос "PATCH"
Я пытаюсь отправить запрос "PATCH" в мое приложение Firebase. Насколько я понимаю, QNetworkManager не поддерживает запрос "Patch".
Как я могу отправить запрос "PATCH"?
2 ответа
Таким образом, мы понимаем, что в QNetworkAccessManager нет метода с именем "patch", поэтому я использовал "sendCustomRequest", но с QBuffer. Потому что QNetworkManager требует объект QIODevice.
QString destination="";
currentNode.replace(QString("/").append(latestNode),"");
destination
.append(host)
.append(currentNode)
.append(".json");
QString jsonString=QString(QString("{").append("\"").append(latestNode).append("\"").append(":").append("\"").append(str).append("\"").append(QString("}")));
QNetworkRequest request(destination);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
qDebug()<<jsonString;
QBuffer *buffer=new QBuffer();
buffer->open((QBuffer::ReadWrite));
buffer->write(jsonString.toUtf8());
buffer->seek(0);
manager->sendCustomRequest(request,"PATCH",buffer);
qDebug()<<"posted";
В качестве QNetworkAccessManager
не поддерживает PATCH неявно, я создал следующий класс QNetworkAccessManagerWithPatch
это делает. Используйте его вместоQNetworkAccessManager
и у вас будут те же 3 варианта для patch()
как есть для post()
, put()
, так далее.
Получите суть Github здесь: https://gist.github.com/paulmasri/efafb8ee350a8ce84a6657a30eb4eb8a
Или возьмите код прямо отсюда: (сохранить как QNetworkAccessManagerWithPatch.h
)
#pragma once
#include <QNetworkAccessManager>
class QNetworkAccessManagerWithPatch : public QNetworkAccessManager
{
Q_OBJECT
public:
explicit QNetworkAccessManagerWithPatch(QObject *parent = Q_NULLPTR)
: QNetworkAccessManager(parent) {}
QNetworkReply* patch(const QNetworkRequest &request, QIODevice *data)
{ return sendCustomRequest(request, "PATCH", data); }
QNetworkReply* patch(const QNetworkRequest &request, const QByteArray &data)
{ return sendCustomRequest(request, "PATCH", data); }
#if QT_CONFIG(http)
QNetworkReply *patch(const QNetworkRequest &request, QHttpMultiPart *multiPart)
{ return sendCustomRequest(request, "PATCH", multiPart); }
#endif
};
Пытаться:
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest request("http://<domain>/<path>/");
QHttpMultiPart* multipart = new QHttpMultiPart();
//... Add your data in multipart
manager->sendCustomRequest(request, "PATCH", multipart);