Я пытаюсь отправить запрос «PATCH» моему приложению firebase. Насколько я знаю, QNetworkManager не поддерживает запрос «Патч».QNetworkAccessManager - Как отправить запрос «PATCH»
Как я могу отправить запрос «PATCH»?
Я пытаюсь отправить запрос «PATCH» моему приложению firebase. Насколько я знаю, QNetworkManager не поддерживает запрос «Патч».QNetworkAccessManager - Как отправить запрос «PATCH»
Как я могу отправить запрос «PATCH»?
Итак, мы ясно знаем, что в 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* manager = new QNetworkAccessManager();
QNetworkRequest request("http://<domain>/<path>/");
QHttpMultiPart* multipart = new QHttpMultiPart();
//... Add your data in multipart
manager->sendCustomRequest(request, "PATCH", multipart);
Помимо: с помощью оператора '+' вместо всех этих 'append's приводит к более четкой и поддерживаемому коду. – owacoder
Обратите внимание, что 'QBuffer' должен быть создан как указатель (как правильно сделал Aykut), а не в стеке, иначе это может быть сбор мусора до того, как запрос успеет выполнить, что очень затрудняет отладки. –