-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXNetworkManagement.cpp
More file actions
107 lines (88 loc) · 3.09 KB
/
Copy pathXNetworkManagement.cpp
File metadata and controls
107 lines (88 loc) · 3.09 KB
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
106
107
#include "XNetworkManagement.h"
XNetworkManagement m_network;
XNetworkManagement::XNetworkManagement()
{
m_busy = false;
m_timeout = 15000;
}
XNetworkManagement::XNetworkManagement(QString m_url, QVector<QString> m_header, QVariantMap m_postValue, std::function<void ()> myFunction)
{
SendRequest(m_url, m_header, m_postValue, m_timeout, myFunction);
}
void XNetworkManagement::get(QString m_url, std::function<void()> myFunction)
{
SendRequest(m_url, {}, {}, m_timeout, myFunction);
}
void XNetworkManagement::get(QString m_url, QVector<QString> m_header, std::function<void()> myFunction)
{
SendRequest(m_url, m_header, {}, m_timeout, myFunction);
}
void XNetworkManagement::post(QString m_url, QVariantMap m_postValue, std::function<void()> myFunction)
{
SendRequest(m_url, {}, m_postValue, m_timeout, myFunction);
}
void XNetworkManagement::post(QString m_url, QVector<QString> m_header, QVariantMap m_postValue, std::function<void()> myFunction)
{
SendRequest(m_url, m_header, m_postValue, m_timeout, myFunction);
}
void XNetworkManagement::setProxy(QNetworkProxy proxy)
{
m_manager->setProxy(proxy);
}
QString XNetworkManagement::toPost(QVariantMap m_value)
{
QString post;
for(int index = 0; index < m_value.size(); index++)
if(index == 0)
post += QString("%1=%2").arg(m_value.keys().at(index)).arg(m_value.value(m_value.keys().at(index)).toString());
else
post += QString("&%1=%2").arg(m_value.keys().at(index)).arg(m_value.value(m_value.keys().at(index)).toString());
return post;
}
void XNetworkManagement::SendRequest(QString m_url, QVector<QString> m_hearders, QVariantMap m_post, int m_timeout, std::function<void ()> m_function)
{
m_busy = true;
m_manager.reset(new QNetworkAccessManager);
QNetworkProxy proxy(QNetworkProxy::ProxyType::Socks5Proxy, "198.23.239.134", 6540, "iawrfnxr", "p7dk8zk5gufb");
m_manager->setProxy(proxy);
QEventLoop m_eventLoop;
QObject::connect(m_manager.data(), &QNetworkAccessManager::finished, &m_eventLoop, &QEventLoop::quit);
// ### append headers to sending request
QNetworkRequest m_request;
m_request.setUrl(m_url);
if(!m_hearders.isEmpty())
for(int index = 0; index < m_hearders.size(); index++)
m_request.setRawHeader(m_hearders.at(index).split(":").at(0).toUtf8(), m_hearders.at(index).split(":").at(1).toUtf8());
// ### manage post and get request method
QNetworkReply* m_reply;
if(m_post.isEmpty())
m_reply = m_manager->get(m_request);
else
m_reply = m_manager->post(m_request, toPost(m_post).toUtf8());
// ### if request finished m_busy -> false
QObject::connect(m_reply, &QNetworkReply::finished, [&]()
{
m_statusResult = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
m_busy = false;
});
// ### if request duration is bigger than m_timeout we should cancel request
QTimer::singleShot(m_timeout, m_reply, [&]()
{
if(m_busy) {
m_reply->abort();
qDebug() << "request timeout.";
}
});
m_eventLoop.exec();
if(m_reply->error() == QNetworkReply::NoError)
{
m_data = m_reply->readAll();
m_function();
return;
}
else
{
qDebug() << "NetworkError: " << m_reply->errorString();
return;
}
}