QT如何处理url图片(图形验证码)流接口

需求:

客户端二次认证获取手机验证码,会遭受漏洞攻击,需要在之前添加图形验证码校验,先调取图形验证码接口;

实例:   

    QByteArray imageData = reply->readAll();
    QPixmap pixmap;
    pixmap.loadFromData(imageData);

功能描述:

图形验证码接口有两种形式,一种是通过通用的Json格式下发QString类型的数据,一种是简单直接的网络格式QByteArray数据;

1、Json数据

数据做了base64转码

QNetworkCookie GetCotrllSessionid;
QNetworkReply::NetworkError err = networkGet(url,retMsg,LoginSessionid,GetCotrllSessionid);
QString dataJsonObject;
    qint32 status;
    if (err == QNetworkReply::NoError)
    {
        QJsonParseError parseJsonErr;
        QJsonDocument documentMessage = QJsonDocument::fromJson(retMsg.toUtf8(),&parseJsonErr);
        if (parseJsonErr.error != QJsonParseError::NoError)
        {
            return;
        }
        QJsonObject jsonObject = documentMessage.object();
        status = jsonObject["code"].toString().toInt();
        dataJsonObject = jsonObject["data"].toString();
    }
    else
    {
        return;
    }

    if(status != ENAPP_CALL_CONTROLLER_API_NO_ERROR)
    {
        return;
    }

    QString imageData;//接收到服务器的base64数据是string类型
    imageData = dataJsonObject;
    QPixmap image;
    bool pic = image.loadFromData(QByteArray::fromBase64(imageData.toLocal8Bit()));
    if(!pic)
    {
        errorInfoShow(tr("验证码加载失败,请点击重试。"), true);
        return;
    }

2、QByteArray数据

QUrl url("https://example.com/image.jpg");
QNetworkAccessManager manager;
QNetworkReply *reply = manager.get(QNetworkRequest(url));
QObject::connect(reply, &QNetworkReply::finished, [=]() {
    if (reply->error() != QNetworkReply::NoError) {
        // 处理请求错误
        return;
    }
    QByteArray imageData = reply->readAll();
    QPixmap pixmap;
    pixmap.loadFromData(imageData);
    // 或者 QImage image = QImage::fromData(imageData);
    // 处理图像数据
});

定义一个QLabel图标,显示图形验证码

    QLabel *plabelPicCode;
    imageData.scaled(plabelPicCode->size(), Qt::KeepAspectRatio);//设置图片大小
    plabelPicCode->setScaledContents(true);
    plabelPicCode->setPixmap(imageData);

3、添加cookie

接口访问需要通过cookie认证

    QNetworkCookieJar* pCookieJar = new QNetworkCookieJar;
    pCookieJar->insertCookie(strPic.mSecCookieSessionID);
    netAccessManager.setCookieJar(pCookieJar);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值