QNetworkAccessManager类允许应用程序发送网络请求和接收响应
QT网络访问的API是围绕QNetworkAccessManager对象构造的。
QNetworkAccessManager包含代理和缓存配置,以及与此类问题相关的信号,以及可用于监视网络操作进度的应答信号。
对于整个Qt应用程序,有一个QNetworkAccessManager对象应该就够了。
一旦创建了QNetworkAccessManager对象,应用程序就可以使用它通过网络发送请求。
它提供了一组函数可以接受请求和可选数据,每个函数返回一个QNetworkReply对象,返回的对象用于获取响应相应请求而返回的任何数据。
QNetworkReply类包含使用QNetworkAccessManager发送的请求数据和请求头。
浏览器访问
qt访问并解析
#include "widget.h"
#include "ui_widget.h"
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QEventLoop>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QNetworkAccessManager *netManger=new QNetworkAccessManager;
QString url = QString("http://web.juhe.cn:8080/finance/stock/hs");
QEventLoop loop;
QObject::connect(netManger, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkRequest request;
request.setUrl(url);
QNetworkReply *reply = netManger->get(request);
loop.exec();
//获取状态码
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"statusCode="<<statusCode;
//获取返回的json格式数据
if(reply->error()==QNetworkReply::NoError)
{
QByteArray resBytes = reply->readAll();
qDebug()<<"resBytes="<<QString(resBytes);
QJsonDocument doc = QJsonDocument::fromJson(resBytes);
QJsonObject json = doc.object();
QString resultcode = json["resultcode"].toString();
qDebug()<<"resultcode="<<resultcode;
int error_code = json["error_code"].toInt();
qDebug()<<"error_code="<<error_code;
}
if(netManger){
delete netManger;
netManger = nullptr;
}
}
Widget::~Widget()
{
delete ui;
}