1.创建一个请求类(HttpWork):

HttpWork.h头文件

#pragma once

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "NetWorkCookie.h"
#include <QNetworkCookie> class HttpWork : public QObject
{
Q_OBJECT public:
HttpWork(QObject *parent,bool ssl=false,bool autoDelete = true);
~HttpWork();
void get(QString url,QString token="");
void post(QString url, QByteArray param, QString token = "");
private:
QNetworkAccessManager *m_pNetworkAccessManager;
NetworkCookie* m_pCookie;
bool m_bEnabelSSl;
bool m_bAutoDelete;
private slots:
void replyFinished(QNetworkReply *reply);
signals:
void sglResponse(QString err, QString data); };

HttpWork.cpp源文件

#include "HttpWork.h"
#include <QNetworkRequest> HttpWork::HttpWork(QObject *parent, bool ssl , bool autoDelete)
: QObject(parent)
, m_bEnabelSSl(ssl)
, m_bAutoDelete(autoDelete)
{
m_pNetworkAccessManager = new QNetworkAccessManager(this);
m_pCookie = new NetworkCookie(this);
connect(m_pNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
} HttpWork::~HttpWork()
{ } void HttpWork::get(QString url,QString token)
{
QNetworkRequest request(url);
if (!token.isEmpty()) {
request.setRawHeader("authorization", token.toStdString().c_str());;
} request.setRawHeader("Content-Type", "application/json");
m_pNetworkAccessManager->get(request);
} void HttpWork::post(QString url, QByteArray param, QString token)
{
QNetworkRequest request(url);
if (!token.isEmpty()) {
request.setRawHeader("authorization", token.toStdString().c_str());;
}
if (m_bEnabelSSl) {
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfig.setProtocol(QSsl::TlsV1_2);
request.setSslConfiguration(sslConfig);
}
//设置cookie到浏览器 m_pNetworkAccessManager->setCookieJar(m_pCookie);
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
m_pNetworkAccessManager->post(request, param);
} void HttpWork::replyFinished(QNetworkReply *reply)
{
int code = -;
QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if (variant.isValid()){
code = variant.toInt();
} QString err;
QByteArray bytes;
if(reply->error() == QNetworkReply::NoError) {
QList<QNetworkCookie> cookies = m_pCookie->getCookies();
for (int i = ; i < cookies.length(); i++) {
QNetworkCookie cookie = cookies.at(i);
QString name = cookie.name();
QString value = cookie.value();
}
bytes = reply->readAll(); }
else {
err = reply->errorString()+"statusCode:"+code;
}
emit sglResponse(err, QString(bytes));
if (m_bAutoDelete) {
deleteLater();
} }

NetworkCookie.h头文件

#pragma once

#include <QNetworkCookieJar>
#include <QNetworkCookie>
class NetworkCookie : public QNetworkCookieJar
{
Q_OBJECT public:
NetworkCookie(QObject *parent);
~NetworkCookie();
QList<QNetworkCookie> getCookies();
void setCookies(const QList<QNetworkCookie>& cookieList);
};

NetworkCookie.cpp源文件

#include "NetworkCookie.h"

NetworkCookie::NetworkCookie(QObject *parent)
: QNetworkCookieJar(parent)
{
} NetworkCookie::~NetworkCookie()
{
} QList<QNetworkCookie> NetworkCookie::getCookies()
{
return QNetworkCookieJar::allCookies();
} void NetworkCookie::setCookies(const QList<QNetworkCookie>& cookieList)
{
this->setAllCookies(cookieList); }

需要http请求数据的时候调用:

void ServerAPI::login(QString address, int port, QString user, QString passwd)
{
m_sAddress = address;
m_nPort = port;
m_sUser = user;
m_sHost = QString("http%1://%2:%3").arg(m_nPort == ? "s" : "").arg(address).arg(port); HttpWork* worker; worker = new HttpWork(this, m_nPort == ); connect(worker, SIGNAL(sglResponse(QString, QString)), this, SLOT(sltOnReponseLogin(QString, QString)));
QByteArray append = QString("type=1&account_or_mobile=%1&pwd_or_checkCode=%2").arg(user).arg(passwd).toUtf8();
worker->post(m_sHost + "/admin-api/v1/user-manage/login", append); }
void ServerAPI::sltOnReponseLogin(QString err, QString data)
{
QString sErr = ""; if (err.isEmpty()) {
cJSON* jsData = cJSON_Parse(data.toStdString().c_str());
if (jsData) {
cJSON* pCode = cJSON_GetObjectItem(jsData, "code");
cJSON* pData = cJSON_GetObjectItem(jsData, "data");
if (pCode->valueint == )
{
m_sToken = cJSON_GetObjectItem(pData, "token")->valuestring;
}
else {
cJSON* pError = cJSON_GetObjectItem(jsData, "error");
sErr = pError->valuestring;
}
}
cJSON_Delete(jsData);
}
else {
sErr = err;
}
emit sglLoginResult(sErr.isEmpty() , sErr);
if (sErr.isEmpty())
{
QTimer::singleShot(, this, SLOT(sltLoopTimeout())); //这是一次性定时器到了定时间隔之后只发送一次信号槽函数只处理一次。初始化时不用等1分钟更新,3秒后就更新数据,不过值调用一次
m_pLoopTimer->start( * * ); //1分钟更新
//m_pLoopTimer->start(1000 * 10); //10秒更新
}
}

最新文章

  1. PHP中删除数组空值的方法
  2. OpenCV(5) 对比度和亮度
  3. xml基本操作和保存配置文件应用实例
  4. spring注解配置启动过程
  5. java web sql注入测试(3)---现象分析
  6. java开发--配置ssh
  7. 基于CSS3新属性Animation及transform实现类似翻书效果
  8. 《精通ASP.NET MVC5》第2章 第一个MVC应用程序
  9. 礼仪或许就是尊重的还有一个说法——leo鉴书61
  10. java中的接口和抽象类是什么?
  11. HOOK API(四)—— 进程防终止
  12. 基于Keepalived的MySQL高可用
  13. Hbase存储模式
  14. [BZOJ1122][POI2008]账本BBB 单调队列+后缀和
  15. CSS深入理解之absolute(HTML/CSS)
  16. 请你谈谈cookie的利弊
  17. Minimum Window Substring leetcode java
  18. centos 最小化安装后要做的事情
  19. Oracle查询表名超过长度限制的表
  20. Spring MVC多动作控制器

热门文章

  1. Git的使用(4) —— 分支的概念和使用
  2. 使用HttpClient访问WebHook
  3. idea 如何新建一个Maven项目并且写第一个servlet
  4. MATLAB中 H(b &gt; g) = 2*pi - H(b &gt; g); 作何解
  5. Status Code: 431 Request Header Fields Too Large
  6. Android: ListView与Button的共存问题解决
  7. 【原创】aws s3 lambda缩略图生成
  8. Typora 精美而强大的Markdown编辑器
  9. 深入学习c++--智能指针(三) unique_ptr
  10. delphi中我用定时器每隔一段时间执行操作