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秒更新
}
}

QT http请求数据的更多相关文章

  1. C# http请求数据

    http中get和post请求的最大区别:get是通过URL传递表单值,post传递的表单值是隐藏到 http报文体中 http以get方式请求数据 /// <summary> /// g ...

  2. 【原生态】Http请求数据 与 发送数据

    今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求 Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post 根 ...

  3. 用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误

    通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...

  4. Java服务器对外提供接口以及Android端向服务器请求数据

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...

  5. 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换

    [源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...

  6. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  7. I/O 请求数据包

    MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439638(v=vs.85).aspx 发送到设备驱动程序的大部 ...

  8. ionic+nodejs开发遇到的跨域和post请求数据问题

    最近学习ionic+nodejs开发混合app中遇到了一些问题,在此总结一下. 开发环境搭建 项目地址 https://github.com/ytudt/nodejsApp 代码和问题都会在之后的学习 ...

  9. jQuery的deferred对象使用详解——实现ajax线性请求数据

    最近遇到一个ajax请求数据的问题 ,就是想要请求3个不同的接口,然后请求完毕后对数据进行操作,主要问题就是不知道这3个请求誰先返回来,或者是在进行操作的时候不能保证数据都已经回来,首先想到能完成的就 ...

随机推荐

  1. shell文本处理工具

    本文将介绍Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk: 提供的例子和参数都是最常用和最为实用 ...

  2. 【Python 代码】CS231n中Softmax线性分类器、非线性分类器对比举例(含python绘图显示结果)

    1 #CS231n中线性.非线性分类器举例(Softmax) #注意其中反向传播的计算 # -*- coding: utf-8 -*- import numpy as np import matplo ...

  3. CentOS下载与服务器版安装(VMware)

    1. 下载 首先需要选择一个版本,因为华为云最新只提供了CentOS 7.6,所以要选择CentOS 7版本的. 官网只提供了最新的版本,而且服务器在国外,下载速度贼慢. 不过官方提供了分布在各个地区 ...

  4. T-MAX组--项目冲刺(第三天)

    THE THIRD DAY 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 T-MAX组--项目冲刺(第三天) 团队名称 T-MA ...

  5. MITMProxy如何配置二次代理

    MITMProxy如何配置二次代理 0.2172018.09.05 11:13:15字数 232阅读 2609 前序: mitmproxy真的很强大,或许是大家都各自使用,或者没有相关的需求,导致我废 ...

  6. m.baidu.com/?tn=simple 开始有广告了。。。

    m.baidu.com/?tn=simple 开始有广告了.... 极简的百度也被安排上了广告,.....   文章来源:外星人来地球 欢迎关注,有问题一起学习欢迎留言.评论

  7. Python 3.8.0 final¶ Release date: 2019-10-14

    https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0 Core and Builtins bpo-38469: Fixed ...

  8. python清理docker-harbor的多余镜像

    # coding: utf-8 from operator import itemgetter from urllib import parse import requests import date ...

  9. Docs-.NET-C#-指南-语言参考-关键字-值类型:enum

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum 1.返回顶部 1. enum(C# 参考) 2015/07/20 enum 关键字用于声明枚举,一种包含一组被称为枚 ...

  10. solidity语言介绍以及开发环境准备

    solidity语言介绍以及开发环境准备   Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...