欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Qt发送http请求

Qt发送http请求

2024/10/24 21:35:24 来源:https://blog.csdn.net/sc_o_r_pio/article/details/142108912  浏览:    关键词: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=OKqDebug()<<"status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();//3.可以获取到这次请求时的urlqDebug()<<"url:"<<reply->url();//4.可以或取到响应头qDebug()<<"raw header:"<<reply->rawHeaderList();//5.可以获取这次响应的错误码,请求成功则返回QNetworkReply::NoErrorqDebug()<<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();});//发送请求//请求需要urlQUrl url("http://t.weather.itboy.net/api/weather/city/101010100");mgr->get(QNetworkRequest(url));

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com