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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值