-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpserver.cpp
More file actions
115 lines (102 loc) · 3.41 KB
/
Copy pathhttpserver.cpp
File metadata and controls
115 lines (102 loc) · 3.41 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
108
109
110
111
112
113
114
#include "httpserver.h"
#include <QtNetwork/QNetworkRequest>
#include<QtNetwork/QNetworkReply>
#include<QtGlobal>
#include<QEventLoop>
#include<QTimer>
#include <QJsonArray>
httpServer::httpServer()
{
}
/**
* @brief http发送和接收接口
* @param strUrl HTTP网络URL
* @param thod HTTP方法,GET或POST
* @param strInput 发送的数据
* @param strMessage http返回的错误信息
* @param strResult http接收响应
*/
void httpServer::SendAndGetText(QString strUrl, QString thod, QString strInput, QString &strMessage, QString &strResult)
{
QNetworkRequest oNetRequest;
oNetRequest.setUrl(QUrl(strUrl));
qDebug()<<__FUNCTION__<<strUrl;
qDebug()<<"thod:"<<thod<<"data:"<<strInput;
QNetworkAccessManager oNetAccessManager;
QNetworkReply* oNetReply = nullptr;
QByteArray inputTmp;
if (thod == "POST")
{
oNetRequest.setRawHeader("Content-Type", "application/json");
oNetReply = oNetAccessManager.post(oNetRequest, strInput.toLocal8Bit());
}
else if (thod == "GET" )
{
oNetReply = oNetAccessManager.get(oNetRequest);
}
else if (thod == "PUT"){
oNetReply = oNetAccessManager.put(oNetRequest, strInput.toLocal8Bit());
}
// 添加超时处理,10s超时
QEventLoop eventloop;
connect(oNetReply, SIGNAL(finished()), &eventloop, SLOT(quit()));
QTimer::singleShot(10000, &eventloop, &QEventLoop::quit);
eventloop.exec();
QByteArray array;
if(oNetReply->isFinished())
{
if(oNetReply->error() == QNetworkReply::NoError)//正常结束,读取响应数据
{
strResult = oNetReply->readAll();
}
else//异常结束,比如不存在的http服务器,错误信息:Connection refused
{
}
}
else//超时,错误信息:Operation canceled
{
disconnect(oNetReply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
oNetReply->abort();
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<" timeout";
}
QNetworkReply::NetworkError e = oNetReply->error();
if (e)
{
strMessage = oNetReply->errorString();
}
oNetReply->deleteLater();
}
//发起post请求 异步
void httpServer::postHttpRequest(QString url,QString data)
{
QNetworkRequest request;
QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
QObject::connect(naManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
request.setUrl(QUrl::fromUserInput(url));
naManager->post(request,data.toLocal8Bit());//发起post请求
}
//接收网络响应槽函数 异步
void httpServer::requestFinished(QNetworkReply *reply)
{
QString loginResultJson;
QByteArray bytes = reply->readAll();
// 获取http状态码
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid())
{
qDebug() << "status code=" << statusCode.toInt();
}
QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError)
{
qDebug() << "Failed: " << reply->errorString();
}
else
{
// 获取返回内容
qDebug() << "loginResultJson is " << QString::fromStdString(bytes.toStdString());
loginResultJson = QString::fromStdString(bytes.toStdString());
//处理返回数据
}
}