-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathposttask.cpp
105 lines (90 loc) · 3.19 KB
/
posttask.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "posttask.h"
#include <QJsonDocument>
using namespace Net;
/*** Post结果 ***/
bool PostResult::isSuccess()
{
return networkSuccess() /*** && customize success judgmenets ***/;
}
QString PostResult::errorMsg(const QString& customErrorMsg)
{
// customize error msg
return "";
}
/*** Post请求基类 ***/
PostTask::PostTask(const QString& url, const QJsonObject& obj)
: Task(url)
{
qInfo() << QStringLiteral("Task begin, params: ") << obj;
m_params = convetJsonValueToString(obj);
}
PostTask::PostTask(const QString& url, const QVariantMap& vm)
: PostTask(url, QJsonObject::fromVariantMap(vm))
{
}
PostTask& PostTask::setLongLogEnable(bool enable)
{
m_longLogEnable = enable;
return *this;
}
ResultPtr PostTask::createResult()
{
return std::make_shared<PostResult>();
}
void PostTask::printResultLog(const ResultPtr& result)
{
if (m_longLogEnable) {
qInfo() << QStringLiteral("Task finished, isSuccess: %1, errorMsg: %2, httpCode: %4, handle result elapsedTime: %5ms;").arg(result->isSuccess() ? "true" : "false").arg(result->errorMsg()).arg(result->m_httpCode).arg(m_elapsedTimer.elapsed())
<< "result: " << result->getJsonObject();
} else {
qInfo() << QStringLiteral("Task finished, isSuccess: %1, errorMsg: %2, httpCode: %4, handle result elapsedTime: %5ms").arg(result->isSuccess() ? "true" : "false").arg(result->errorMsg()).arg(result->m_httpCode).arg(m_elapsedTimer.elapsed());
}
}
/*** Post application/json请求 ***/
QNetworkReply* PostJsonTask::execute()
{
return getNetworkAccessManager()->post(m_request, QJsonDocument(m_params).toJson());
}
QString PostJsonTask::getContentType()
{
return QStringLiteral("application/json");
}
#include <QUrlQuery>
/*** Post application/x-www-form-urlencoded请求 ***/
QNetworkReply* PostUrlEncodeTask::execute()
{
QUrlQuery postData;
QList<QPair<QString, QString>> query;
for (auto it = m_params.constBegin(); it != m_params.constEnd(); ++it) {
query.push_back(QPair<QString, QString>(it.key(), QUrl::toPercentEncoding(it.value().toString())));
}
postData.setQueryItems(query);
return getNetworkAccessManager()->post(m_request, postData.toString(QUrl::FullyEncoded).toUtf8());
}
QString PostUrlEncodeTask::getContentType()
{
return QStringLiteral("application/x-www-form-urlencoded");
}
#include <QHttpPart>
/*** Post application/form-data请求 ***/
QNetworkReply* PostMultiPartTask::execute()
{
m_multiPart = std::make_unique<QHttpMultiPart>(QHttpMultiPart::FormDataType);
addHttpParamPart(m_multiPart, m_params);
return getNetworkAccessManager()->post(m_request, m_multiPart.get());
}
QString PostMultiPartTask::getContentType()
{
return QStringLiteral("");
}
void PostMultiPartTask::addHttpParamPart(const std::unique_ptr<QHttpMultiPart>& multiPart, const QJsonObject& params)
{
const auto& keys = params.keys();
for (const auto& key : keys) {
const auto& value = params.value(key).toString();
QHttpPart httpPart;
httpPart.setHeader(QNetworkRequest::ContentDispositionHeader, QString(R"(form-data; name="%1")").arg(key));
httpPart.setBody(value.toUtf8());
multiPart->append(httpPart);
}
}