Qt使用http协议进行Json格式post数据

Qt使用http协议进行post数据

使用Qt进行post数据

近段时间项目遇到使用http协议进行post请求,简单逻辑就是post一段请求到url,等待url回复,若一定时间内没有受到回复则按超时处理。这里直接上post相关代码以及阻塞处理消息的相关代码。
先加上Qt相关的头文件

#include <QJsonObject>
#include <QtNetwork>
#include <QByteArray>

需要创建的相关成员变量有:

    QNetworkAccessManager*  m_httpManager;
    QNetworkReply * m_httpReply;
    QNetworkRequest  m_httpRequest;
    QByteArray  m_httpData;
    QJsonDocument m_httpDocum;

下面介绍下封装的一段接口函数

	bool _ret;	// 返回结果
	QJsonObject _exampleObject;
    _exampleObject.insert("key1", value1);
    _exampleObject.insert("key2", value2);
    _exampleObject.insert("key3", value3);
    _exampleObject.insert("key4", value4);
	//post请求的数据是Json格式。首先创建QJsonObject对象,并插入数据。
    m_httpDocum.setObject(_exampleObject);
    m_httpData = m_httpDocum.toJson(QJsonDocument::Compact);
    // 转成Json格式
    QUrl _url("url");
    m_httpRequest.setUrl(_url);
	// 设置请求的url 注意地址的正确性 之前我就受到了http和https的坑
	    m_httpRequest.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
   // 设置请求头
    m_httpReply = m_httpManager->post(m_httpRequest, m_httpData);
    // post请求
    QEventLoop _loop;
    QTimer _timer;
    connect(m_httpReply, SIGNAL(finished()), &_loop, SLOT(quit()));
    connect(&_timer, SIGNAL(timeout()), &_loop, SLOT(quit()));
    // eventloop用于阻塞等待消息,并结合timer进行超时处理
    _timer.start(1000);
    _loop.exec();
    // 这里的eventloop只是阻塞此段,并不会阻塞其他块的代码,比如我不加定时器,让这个eventloop一直exec,还是可以出发相关的槽函数
    if(_timer.isActive())
    {
        _timer.stop();
        _ret = httpHandleData();
        // 处理函数
    }
    else
    {
        qDebug() <<  "time Out";
        //超时结果
    }
    _loop.deleteLater();
    _timer.deleteLater();
    // 释放资源
    m_httpReply->abort();
    // 断开连接
    return _ret;
  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值