Qt-HTTP类实现

使用Qt类实现http协议get和post请求

//BaseHttpAPI.h
#pragma once

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
class BaseHttpAPI : public QObject
{
    Q_OBJECT

public:
    BaseHttpAPI(QObject* parent = nullptr);
    ~BaseHttpAPI();
    void get(const QString& url);
    void synGet(const QString& url);
    void synPost(const QString& url, const QByteArray& data);
    void post(const QString& url, const QByteArray& data);

signals:
    void sigRequestFinished(QString url);

public slots:
    void serviceRequestFinished(QNetworkReply* reply);

private:
    QNetworkRequest _httpRequest;
    QNetworkAccessManager _networkAccessMgr;
    QNetworkReply* _reply;
    QString _url;
    QByteArray _data;
    int _statusCode;

};
//BaseHttpAPI.cpp
#include "BaseHttpAPI.h"
#include <QDebug>
#include <QEventLoop>
#include <QMessageBox>

BaseHttpAPI::BaseHttpAPI(QObject* parent)
    : QObject(parent)
{
    QObject::connect(&_networkAccessMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
}

BaseHttpAPI::~BaseHttpAPI()
{
}

void BaseHttpAPI::get(const QString& url)
{
    _httpRequest.setUrl(QUrl(url));
    QNetworkReply* reply = _networkAccessMgr.get(_httpRequest);
}

void BaseHttpAPI::synGet(const QString& url)
{
    qDebug() << url;
    _httpRequest.setUrl(QUrl(url));
    QNetworkReply* reply = _networkAccessMgr.get(_httpRequest);
    QEventLoop eventLoop;
    connect(&_networkAccessMgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();       //block until finish
    disconnect(&_networkAccessMgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
}

void BaseHttpAPI::synPost(const QString& url, const QByteArray& data)
{
    qDebug() << url << QString(data);
    _httpRequest.setHeader(QNetworkRequest::ContentLengthHeader, data.size());
    _httpRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    _httpRequest.setUrl(QUrl(url));
    QNetworkReply* reply = _networkAccessMgr.post(_httpRequest, data);
    QEventLoop eventLoop;
    connect(&_networkAccessMgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();       //block until finish
    disconnect(&_networkAccessMgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
}

void BaseHttpAPI::post(const QString& url, const QByteArray& data)
{
    _httpRequest.setHeader(QNetworkRequest::ContentLengthHeader, data.size());
    _httpRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    _httpRequest.setUrl(QUrl(url));
    QNetworkReply* reply = _networkAccessMgr.post(_httpRequest, data);
}

void BaseHttpAPI::serviceRequestFinished(QNetworkReply* reply)
{
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

    if (reply->error() == QNetworkReply::NoError)
    {
        _url = reply->url().url();
        _reply = reply;
        _data = reply->readAll();
        _statusCode = statusCode;
        //qDebug() << "reply data:" << _reply;
        //qDebug() << "reply data:" << _data;
        //qDebug() << "reply data:" << _statusCode;
    }
    else
    {
        _reply = nullptr;
        _data = QByteArray();
        _statusCode = 0;
    }

    emit sigRequestFinished(reply->url().toString());
    reply->deleteLater();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt作为一个跨平台的框架,提供了丰富的网络编程功能,可以通过Qt实现HTTP投屏功能。 HTTP(HyperText Transfer Protocol)是一种用于传输超文本的协议,常用于网页浏览和客户端与服务器之间的通信。投屏指的是将一个设备上的内容直接显示到另一台设备上的过程,在HTTP实现投屏主要涉及两个方面:作为服务器接收投屏请求和作为客户端发送投屏内容。 作为服务器接收投屏请求,可以使用Qt中的QtNetwork模块实现。首先创建一个QTcpServer对象,监听指定的端口,等待客户端请求。当收到投屏请求时,可以解析请求中的相关参数,比如投屏设备的ID、投屏内容等。然后根据请求参数,可以使用Qt中的QHttpServer模块或自定义的HTTP服务器逻辑,将投屏内容返回给客户端。 作为客户端发送投屏内容,可以使用Qt中的QNetworkAccessManager,它提供了发送HTTP请求的功能。首先创建一个QNetworkAccessManager对象,设置请求的URL和其他参数,比如请求方法、请求头等。然后使用QNetworkRequest构造请求对象,发送请求并等待响应。一旦收到响应,可以解析响应中的内容,比如投屏设备的标识码、响应码等。 综上所述,使用Qt实现HTTP投屏功能,主要涉及作为服务器接收投屏请求和作为客户端发送投屏内容两个方面。通过Qt提供的网络编程功能,可以灵活地实现HTTP投屏功能,并且跨平台性能良好。当然,具体的实现方式还需要根据实际需求和网络通信协议进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值