简体   繁体   English

QNetworkAccessManager - 如何发送“PATCH”请求

[英]QNetworkAccessManager - How to send "PATCH" request

I am trying to send a "PATCH" request to my firebase application.As far as I read QNetworkManager doesn't support "Patch" request.我正在尝试向我的 firebase 应用程序发送“补丁”请求。据我所知,QNetworkManager 不支持“补丁”请求。

How can I send "PATCH" request ?如何发送“PATCH”请求?

So we are clear that there is no method in QNetworkAccessManager named "patch" Therefore I have used "sendCustomRequest" but with QBuffer.所以我们很清楚 QNetworkAccessManager 中没有名为“patch”的方法,因此我使用了“sendCustomRequest”,但使用了 QBuffer。 Because QNetworkManager requires a QIODevice object.因为 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";

try:尝试:

QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest request("http://<domain>/<path>/");
QHttpMultiPart* multipart = new QHttpMultiPart();
//... Add your data in multipart
manager->sendCustomRequest(request, "PATCH", multipart);

As QNetworkAccessManager does not support PATCH implicitly, I've created the following class QNetworkAccessManagerWithPatch that does.由于QNetworkAccessManager不隐式支持 PATCH,我创建了以下类QNetworkAccessManagerWithPatch Use it in place of QNetworkAccessManager and you'll have the same 3 variants for patch() as there are for post() , put() , etc.使用它代替QNetworkAccessManager ,您将拥有与post()put()等相同的 3 个patch()变体。

Get the Github gist here: https://gist.github.com/paulmasri/efafb8ee350a8ce84a6657a30eb4eb8a在此处获取 Github 要点: https : //gist.github.com/paulmasri/efafb8ee350a8ce84a6657a30eb4eb8a

Or take the code directly from here: (save as QNetworkAccessManagerWithPatch.h )或者直接从这里获取代码:(另存为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
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM