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. vim 文本替换讲解

    在VIM中进行文本替换: 1. 替换当前行中的内容: :s/from/to/ (s即substitude) :s/from/to/ : 将当前行中的第一个from,替换成to.如果当前行含有多个 fr ...

  2. 02_02Session中Config的参数设置

    import tensorflow as tfimport numpy as np # todo 学习 Session中的参数Config=tf.ConfigProto()的使用.重点是GPU相关的参 ...

  3. QT中显示动画

    在QT中要显示GIF图片,不能通过单单的添加部件来完成.还需要手动的编写程序.工具:QT Creator新建一个工程,我们先在designer中,添加一个QLabel部件. 将QLabel拉成适当大小 ...

  4. php-浮点数计算,double类型数加减乘除必须用PHP提供的高精度计算函数

    一.前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦.比如今天工作终于到的一个案例: $a = 2586; $ ...

  5. Fiddler查看request是由哪一个process发起的

    有一个Process列 查看到进程编号是24836 然后用chrome自带的TaskManager查看对应的是哪一个进程 https://www.lifewire.com/google-chrome- ...

  6. 通过字节码分析this关键字以及异常表的作用

    1.创建MyTest3类 public class MyTest3 { public void test(){ try { InputStream is = new FileInputStream(& ...

  7. Sizes of integer types 整形字节长度 系统字节

    /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software ...

  8. ISO/IEC 9899:2011 条款6.7.7——类型名

    6.7.7 类型名 语法 1.type-name: specifier-qualifier-list    abstract-declaratoropt abstract-declarator: po ...

  9. 003-结构型-07-享元模式(Flyweight)

    一.概述 提供了减少对象数且从而改善应用所需的对象结构的方式.运用共享技术有效地支持大是细粒度的对象. 它通过与其他类似对象共享数据来减小内存占用.它使用共享物件,用来尽可能减少内存使用量以及分享资讯 ...

  10. Python 相对导入attempted relative import beyond top-level package

    ValueError: attempted relative import beyond top-level package 假设有如下层次包目录 project/ __init__.py mypac ...