QT http请求数据
1.创建一个请求类(HttpWork):
HttpWork.h头文件
#pragma once #include <QObject> #include <QNetworkAccessManager> #include <QNetworkReply> #include "NetWorkCookie.h" #include <QNetworkCookie> class HttpWork : public QObject { Q_OBJECT public: HttpWork(QObject *parent,bool ssl=false,bool autoDelete = true); ~HttpWork(); void get(QString url,QString token=""); void post(QString url, QByteArray param, QString token = ""); private: QNetworkAccessManager *m_pNetworkAccessManager; NetworkCookie* m_pCookie; bool m_bEnabelSSl; bool m_bAutoDelete; private slots: void replyFinished(QNetworkReply *reply); signals: void sglResponse(QString err, QString data); };
HttpWork.cpp源文件
#include "HttpWork.h" #include <QNetworkRequest> HttpWork::HttpWork(QObject *parent, bool ssl , bool autoDelete) : QObject(parent) , m_bEnabelSSl(ssl) , m_bAutoDelete(autoDelete) { m_pNetworkAccessManager = new QNetworkAccessManager(this); m_pCookie = new NetworkCookie(this); connect(m_pNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); } HttpWork::~HttpWork() { } void HttpWork::get(QString url,QString token) { QNetworkRequest request(url); if (!token.isEmpty()) { request.setRawHeader("authorization", token.toStdString().c_str());; } request.setRawHeader("Content-Type", "application/json"); m_pNetworkAccessManager->get(request); } void HttpWork::post(QString url, QByteArray param, QString token) { QNetworkRequest request(url); if (!token.isEmpty()) { request.setRawHeader("authorization", token.toStdString().c_str());; } if (m_bEnabelSSl) { QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); sslConfig.setProtocol(QSsl::TlsV1_2); request.setSslConfiguration(sslConfig); } //设置cookie到浏览器 m_pNetworkAccessManager->setCookieJar(m_pCookie); request.setRawHeader("Content-Type", "application/json"); request.setRawHeader("Content-Type", "application/x-www-form-urlencoded"); m_pNetworkAccessManager->post(request, param); } void HttpWork::replyFinished(QNetworkReply *reply) { int code = -1; QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if (variant.isValid()){ code = variant.toInt(); } QString err; QByteArray bytes; if(reply->error() == QNetworkReply::NoError) { QList<QNetworkCookie> cookies = m_pCookie->getCookies(); for (int i = 0; i < cookies.length(); i++) { QNetworkCookie cookie = cookies.at(i); QString name = cookie.name(); QString value = cookie.value(); } bytes = reply->readAll(); } else { err = reply->errorString()+"statusCode:"+code; } emit sglResponse(err, QString(bytes)); if (m_bAutoDelete) { deleteLater(); } }
NetworkCookie.h头文件
#pragma once #include <QNetworkCookieJar> #include <QNetworkCookie> class NetworkCookie : public QNetworkCookieJar { Q_OBJECT public: NetworkCookie(QObject *parent); ~NetworkCookie(); QList<QNetworkCookie> getCookies(); void setCookies(const QList<QNetworkCookie>& cookieList); };
NetworkCookie.cpp源文件
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41530.html