cpp-qt-client.HttpRequest.h.mustache Maven / Gradle / Ivy
{{>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
#include
#include
#include
#include
#include
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
#include
#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 vars;
QMap 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 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 headers;
QMap files;
QMap 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