mirror of https://github.com/linuxdeepin/linglong
108 lines
3.1 KiB
Plaintext
108 lines
3.1 KiB
Plaintext
{{>licenseInfo}}
|
|
/**
|
|
* Based on http://www.creativepulse.gr/en/blog/2014/restful-api-requests-using-qt-cpp-for-linux-mac-osx-ms-windows
|
|
* By Alex Stylianos
|
|
*
|
|
**/
|
|
|
|
#ifndef {{prefix}}_HTTPREQUESTWORKER_H
|
|
#define {{prefix}}_HTTPREQUESTWORKER_H
|
|
|
|
#include <QMap>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QTimer>
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
|
#include <QRandomGenerator>
|
|
#endif
|
|
|
|
#include "{{prefix}}HttpFileElement.h"
|
|
|
|
{{#cppNamespaceDeclarations}}
|
|
namespace {{this}} {
|
|
{{/cppNamespaceDeclarations}}
|
|
|
|
enum {{prefix}}HttpRequestVarLayout {
|
|
NOT_SET,
|
|
ADDRESS,
|
|
URL_ENCODED,
|
|
MULTIPART
|
|
};
|
|
|
|
class {{prefix}}HttpRequestInput {
|
|
|
|
public:
|
|
QString url_str;
|
|
QString http_method;
|
|
{{prefix}}HttpRequestVarLayout var_layout;
|
|
QMap<QString, QString> vars;
|
|
QMap<QString, QString> headers;
|
|
QList<{{prefix}}HttpFileElement> files;
|
|
QByteArray request_body;
|
|
|
|
{{prefix}}HttpRequestInput();
|
|
{{prefix}}HttpRequestInput(QString v_url_str, QString v_http_method);
|
|
void initialize();
|
|
void add_var(QString key, QString value);
|
|
void add_file(QString variable_name, QString local_filename, QString request_filename, QString mime_type);
|
|
};
|
|
|
|
class {{prefix}}HttpRequestWorker : public QObject {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit {{prefix}}HttpRequestWorker(QObject *parent = nullptr, QNetworkAccessManager *manager = nullptr);
|
|
virtual ~{{prefix}}HttpRequestWorker();
|
|
|
|
QByteArray response;
|
|
QNetworkReply::NetworkError error_type;
|
|
QString error_str;
|
|
|
|
QMap<QString, QString> getResponseHeaders() const;
|
|
QString http_attribute_encode(QString attribute_name, QString input);
|
|
void execute({{prefix}}HttpRequestInput *input);
|
|
static QSslConfiguration *sslDefaultConfiguration;
|
|
void setTimeOut(int timeOutMs);
|
|
void setWorkingDirectory(const QString &path);
|
|
{{prefix}}HttpFileElement getHttpFileElement(const QString &fieldname = QString());
|
|
QByteArray *getMultiPartField(const QString &fieldname = QString());
|
|
void setResponseCompressionEnabled(bool enable);
|
|
void setRequestCompressionEnabled(bool enable);
|
|
int getHttpResponseCode() const;
|
|
|
|
Q_SIGNALS:
|
|
void on_execution_finished({{prefix}}HttpRequestWorker *worker);
|
|
|
|
private:
|
|
enum {{prefix}}CompressionType{
|
|
Zlib,
|
|
Gzip
|
|
};
|
|
QNetworkAccessManager *manager;
|
|
QMap<QString, QString> headers;
|
|
QMap<QString, {{prefix}}HttpFileElement> files;
|
|
QMap<QString, QByteArray *> multiPartFields;
|
|
QString workingDirectory;
|
|
QTimer timeOutTimer;
|
|
bool isResponseCompressionEnabled;
|
|
bool isRequestCompressionEnabled;
|
|
int httpResponseCode;
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
|
QRandomGenerator randomGenerator;
|
|
#endif
|
|
|
|
void on_reply_timeout(QNetworkReply *reply);
|
|
void on_reply_finished(QNetworkReply *reply);
|
|
void process_response(QNetworkReply *reply);
|
|
QByteArray decompress(const QByteArray& data);
|
|
QByteArray compress(const QByteArray& input, int level, {{prefix}}CompressionType compressType);
|
|
};
|
|
|
|
{{#cppNamespaceDeclarations}}
|
|
} // namespace {{this}}
|
|
{{/cppNamespaceDeclarations}}
|
|
|
|
#endif // {{prefix}}_HTTPREQUESTWORKER_H
|