QT c++实现web网页的一些操作

2021/10/7 17:13:27

本文主要是介绍QT c++实现web网页的一些操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 文章背景

        之前有个项目,为了提高网络摄像头的采图效率,我从最开始的opencv调rtsp到用大华的SDK接口,最终成功实现了采图速度也确实快了很多,但如果同一台电脑有多个网络摄像头连接,同一时间又可能有多个摄像头采图,由于摄像头出厂配置都是一样的,即ip是固定的(我拿到的ip统一为192.168.1.108),而SDK采图又必须通过摄像头ip,端口等信息,这就导致我同一台电脑连接多个摄像头时,我无法区分当前连接的是哪个摄像头。

        于是我想通过修改ip或端口,用以区分连接的多个摄像头,恰巧大华对网络摄像头的监视和配置有个web,登录上之后我找到了修改的地方并保存,手动点击网页发现可以实现,于是考虑通过代码实现这个过程。

2. 前期准备

        由于我主要是写c++/python,对web前端等知识的了解基本为零,所以请教了我的高中同学(空心菜JSS),感谢我女神的不吝赐教,感谢感谢!~~

        postman调试工具

        web和c++的通讯模块

2.1 找到web接口

        首先要从web找到你要用代码实现的操作,一般Fn+F12进调试界面就可以看到了,主要确定下url地址和调用方法(GET/POST....)有的操作需要拼接一些数据,基本都是json格式的,很容易看懂。

2.1.1 登录接口

 2.1.2 修改ip接口

2.2 postman调试

2.2.1 登录接口调试

        把从网页上看到的信息复制进postman即可,登录第一步出错是正常的,因为我不知道session,所以第一步要先获得session,就在返回的json格式的一堆数据里,拿到后解析一下就好了。

         拿到session后,把session写入数据再发一次,正常情况下就会返回正确了。

2.2.2 修改ip接口调试

        这个其实和上个接口大同小异,只是这个的数据多一点而已,但反正都是从网页上复制的。

3. 代码实现

3.1 登录函数

QString MainWidget::loginWeb(QString ipAdress)
{
    QString url = QString("http://%1/RPC2_Login").arg(ipAdress);
    QVariantMap postDataMap = HaatGlobalUtils::jsonfileToVariantMap(QString(":/Config/loginPostData.json"));
    int sendID = postDataMap["id"].toInt();
    bool result = false;
    int count = 0;
    QString m_session;
    while(!result && count < 2)
    {
        QString postDataStr = HaatGlobalUtils::getJsonStringFromMap(postDataMap);
        QByteArray postData = postDataStr.toLatin1();
        QByteArray responseData = m_http->postSync(url, postData);
        count ++;
        QVariantMap loginResponse = HaatGlobalUtils::getMapFromJsonString(QString(responseData));
        if(sendID == loginResponse["id"].toInt())
        {
            result = loginResponse["result"].toBool();
            m_session = loginResponse["session"].toString();
            postDataMap["session"] = m_session;
            ui->textEdit->append(result? QSC("登录成功") : QSC("获取session%1").arg(m_session.isEmpty()? QSC("失败") : QSC("成功")));
            if(result)
                qDebug() << QSC("登录成功");
            else
                qDebug() << QSC("获取session%1").arg(m_session.isEmpty()? QSC("失败") : QSC("成功"));
        }
        else
        {
            ui->textEdit->append(QSC("错误:收发不对应!"));
            qDebug() << QSC("错误:收发不对应!");
        }
    }
    return result? m_session : "";
}

3.2 修改ip函数

bool MainWidget::alterIP(QString sessionStr, QString ipAdress, QString alterIPAdress)
{
    QString url = QString("http://%1/RPC2").arg(ipAdress);
    QVariantMap postDataMap = HaatGlobalUtils::jsonfileToVariantMap(QString(":/Config/alterPostData.json"));
    postDataMap["session"] = sessionStr;
    QVariantList paramsList = postDataMap["params"].toList();
    for(QVariant paramsTemp : paramsList)
        if(paramsTemp.toMap().keys().contains("session"))
            paramsTemp.toMap()["session"] = sessionStr;
    QString postDataStr = HaatGlobalUtils::getJsonStringFromMap(postDataMap);
    postDataStr.replace(QString("%1").arg(ipAdress), QString("%1").arg(alterIPAdress));
    QByteArray postData = postDataStr.toLatin1();
    QByteArray responseData = m_http->postSync(url, postData);
    QVariantMap alterResponse = HaatGlobalUtils::getMapFromJsonString(QString(responseData));
    bool result = alterResponse["result"].toBool();
    ui->textEdit->append(QSC("ip:%1 -> %2 修改%3").arg(ipAdress).arg(alterIPAdress).arg(result? QSC("成功") : QSC("失败")));
    qDebug() << QSC("ip:%1 -> %2 修改%3").arg(ipAdress).arg(alterIPAdress).arg(result? QSC("成功") : QSC("失败"));
    return result;    
}

4. 实现效果

修改完后登录了下网页查看,修改成功,完结撒花~



这篇关于QT c++实现web网页的一些操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程