当前位置: 首页 > article >正文

Qt发送http请求

需要在.pro项目文件中添加网络模块,不然无法使用http相关的类获取数据

QT += core gui network

用于http通信的类为QNetworkAccessManager

发送Get请求

通过调用QNetworkAccessManager::get方法

QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)

如何获得响应

每次发送http请求收到响应后QNetworkAccessManager都会发出1个finished信号:

[signal] void QNetworkAccessManager::finished(QNetworkReply *reply)

这个信号的参数就存储了http响应的信息

我们就可定义一个槽函数来绑定这个信号,在槽函数中解析信号传过来的参数中携带的信息

举例

向天气网发送请求,获取北京的最近几天的天气数据,然后将请求到的数据打印到控制台

#include<QNetworkAccessManager>
#include<QNetworkReply>
#include<QNetworkRequest>
#include<QUrl>

    //创建http请求管理类
    QNetworkAccessManager* mgr=new QNetworkAccessManager(this);

    //绑定槽函数
    connect(mgr,&QNetworkAccessManager::finished,this,[=](QNetworkReply* reply){
        //在这个槽函数中解析响应
        //1.可以获取到这次请求的方法,是get还是post或其他
        qDebug()<<"operation:"<<reply->operation();

        //2.可以获取到这次响应的状态码,200=OK
        qDebug()<<"status code:"<<
        reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

        //3.可以获取到这次请求时的url
        qDebug()<<"url:"<<reply->url();

        //4.可以或取到响应头
        qDebug()<<"raw header:"<<reply->rawHeaderList();

        //5.可以获取这次响应的错误码,请求成功则返回QNetworkReply::NoError
        qDebug()<<reply->error();

        if(reply->error()!=QNetworkReply::NoError
            || reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()!=200)
        {
            //请求失败直接返回
            return;
        }

        //6.获取响应的json报文
        //readAll方法
        auto reply_info=reply->readAll();
        qDebug()<<"json info:\n"<<reply_info.data();

        //每次响应解析完成后记得释放内存
        reply->deleteLater();

    });


    //发送请求
    //请求需要url
    QUrl url("http://t.weather.itboy.net/api/weather/city/101010100");
    mgr->get(QNetworkRequest(url));


http://www.kler.cn/a/299331.html

相关文章:

  • QT6生成可执行程序exe,独立运行报错
  • 交通大数据
  • AMD RDNA走到尽头,UDNA合二为一
  • 从hadoop平台下载文件到本地Windows
  • iOS——APP启动流程
  • Leetcode 移动零
  • qApp->allWindows()
  • EAC认证—技术护照、安全论证和使用说明编制要求
  • Github 2024-09-10 Python开源项目日报 Top10
  • go急速入门API开发
  • 深度学习-目标检测(一)-R-CNN
  • 2024年10款好用的图纸加密软件推荐|有效的图纸加密方法分享
  • C#--CM+Fody+HCWPF开发组合
  • 图标工具类 - C#小函数类推荐
  • 『功能项目』状态模式转换场景【30】
  • DDoS安全防护,多场景适用!
  • 各类AI工具编程能力测试对比
  • Ubuntu 安装PostgreSQL
  • 【PPT学习笔记】使用PPT制作动画/手书/视频等作品的适配性和可能性?
  • [苍穹外卖]-08微信支付详解