QT http请求数据
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请求数据的更多相关文章
- C# http请求数据
http中get和post请求的最大区别:get是通过URL传递表单值,post传递的表单值是隐藏到 http报文体中 http以get方式请求数据 /// <summary> /// g ...
- 【原生态】Http请求数据 与 发送数据
今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求 Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post 根 ...
- 用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误
通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...
- Java服务器对外提供接口以及Android端向服务器请求数据
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...
- 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换
[源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- I/O 请求数据包
MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439638(v=vs.85).aspx 发送到设备驱动程序的大部 ...
- ionic+nodejs开发遇到的跨域和post请求数据问题
最近学习ionic+nodejs开发混合app中遇到了一些问题,在此总结一下. 开发环境搭建 项目地址 https://github.com/ytudt/nodejsApp 代码和问题都会在之后的学习 ...
- jQuery的deferred对象使用详解——实现ajax线性请求数据
最近遇到一个ajax请求数据的问题 ,就是想要请求3个不同的接口,然后请求完毕后对数据进行操作,主要问题就是不知道这3个请求誰先返回来,或者是在进行操作的时候不能保证数据都已经回来,首先想到能完成的就 ...
随机推荐
- Java中对象并不是都在堆上分配内存的
转(https://blog.51cto.com/13906751/2153924) 前段时间,给星球的球友们专门码了一篇文章<深入分析Java的编译原理>,其中深入的介绍了Java中的j ...
- 2018-2019-2 网络对抗技术 20165322 Exp8 Web基础
2018-2019-2 网络对抗技术 20165322 Exp8 Web基础 目录 实验原理 实验内容与步骤 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启 ...
- RabbitMQ Management API调用
RabbitMQ在运行时,偶尔会有一些死信,即消息未正常消费,造成消息积压在消息队列中, 一直卡住,重复循环消费原来的消息队列 那么就需要有一种机制,来查看RabbitMQ是否有消息未正常消费,从而让 ...
- 深度学习面试题20:GoogLeNet(Inception V1)
目录 简介 网络结构 对应代码 网络说明 参考资料 简介 2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名.VGG获得了第二 ...
- JVM 修改类加载器启动类加载器
1.类加载器加载路径 public class MyTest18 { public static void main(String[] args) { //系统类加载器加载路径 System.out. ...
- Mysql中 查询慢的 Sql语句的记录查找
Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...
- python自动化登录获取图片登录验证码
主要记录一下:图片验证码1.获取登录界面的图片2.获取验证码位置3.在登录页面截取验证码保存4.调用百度api识别(目前准确率较高的识别图片api)本次登录的系统页面,可以看到图片验证码的位置登录页面 ...
- JMS与消息队列
JMS,Java Message Service,即Java消息服务. MOM,Message Oriented Miiddleware的英文缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交 ...
- futex的设计与实现
介绍 futex(快速用户空间互斥)是Linux的一个基础组件,可以用来构建各种更高级别的同步机制,比如锁或者信号量等等,POSIX信号量就是基于futex构建的.大多数时候编写应用程序并不需要直接使 ...
- 《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sinat_17736151/articl ...