目录

基本概念

代码与实例


基本概念

这里有一个查询余额的:https://blog.csdn.net/qq78442761/article/details/100096351

下面来看看官方API文档

代码与实例

成功的实例,Fiddler如下:

验证码如下:

程序运行截图如下:

可见识别成功!

源码如下:

#include <QCoreApplication>
#include <QEventLoop>
#include <QDebug>
#include <QDateTime>
#include <QString>
#include <QMap>
#include <QJsonDocument>
#include <QCryptographicHash>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QFile>
#include <QNetworkRequest>const QString pdId = "AAAAA";
const QString pdKey = "BBBBBBBBBBBB";
const QString appId = "CCCCC";
const QString appKey = "DDDDDDDDDDDDDDDD/DDDDDDDDDDDDDD";int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager *manager = new QNetworkAccessManager;QNetworkRequest *request = new QNetworkRequest;QString requestStr = "http://pred.fateadm.com/api/capreg";request->setUrl(requestStr);request->setRawHeader("Content-type", "application/x-www-form-urlencoded");//参数uint currentTime = QDateTime::currentDateTime().toTime_t();//签名串QCryptographicHash pdMD5_1(QCryptographicHash::Md5);QCryptographicHash pdMD5_2(QCryptographicHash::Md5);QString pdMD51Str = QString::number(currentTime) + pdKey;pdMD5_1.addData(pdMD51Str.toUtf8());QString pdMD52Str = pdId + QString::number(currentTime) + QString(pdMD5_1.result().toHex());pdMD5_2.addData(pdMD52Str.toUtf8());//app签名串QCryptographicHash appMD5_1(QCryptographicHash::Md5);QCryptographicHash appMD5_2(QCryptographicHash::Md5);QString appMD51Str = QString::number(currentTime) + appKey;appMD5_1.addData(appMD51Str.toUtf8());QString appMD52Str = appId + QString::number(currentTime) + QString(appMD5_1.result().toHex());appMD5_2.addData(appMD52Str.toUtf8());//得到文件数据QFile file("E:\\Qt2019\\PostImage\\genimage.png");if(!file.open(QIODevice::ReadOnly)){qDebug() << "这个文件有毒";return 0;}QString body = QString("user_id=%1&timestamp=%2&sign=%3&asign=%4&predict_type=%5&img_data=%6").arg(pdId).arg(currentTime).arg(QString(pdMD5_2.result().toHex())).arg(QString(appMD5_2.result().toHex())).arg(10400).arg(QString(file.readAll().toBase64()).replace("/", "%2F").replace("+", "%2B"));QNetworkReply *reply = manager->post(*request, body.toUtf8());QEventLoop loop;QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));loop.exec();qDebug() << "The result is : ";QMap<QString, QVariant> map = QJsonDocument().fromJson(reply->readAll()).toVariant().toMap();qDebug() << map;delete request;delete manager;file.close();return a.exec();
}

这里有个坑,可以会出现Base64有问题:

Fiddler如下:

原因是因为,在HTTP传输中Base64要转几个字符串:

这样即可正确传输

Qt实践| HTTP知识点-接入某图片验证码系统识别验证码相关推荐

  1. Qt实践| HTTP知识点-接入某图片验证码系统查询余额

    目录 基本概念 代码与实例 基本概念 这个是接入了某识别验证码系统,这个验证码系统有很多的接口,其中就有VC++接口,但个人觉得,这个接口不太好,因为本人想用C++ Qt框架实现,而这个Qt框架的最大 ...

  2. Qt实践| HTTP知识点-Qt填充referer请求头盗取图片

    目录 基本概念 代码与实例 基本概念 HTTP协议头中的Referer主要是用来让服务器判断来源页面,即用户是从那个页面来的.网站通常用其来统计用户来源,看用户是从搜索页面来的,还是从其他网站链接来的 ...

  3. Qt实践|HTTPS知识点-SSL socket获取百度首页

    目录 基本概念 代码与实例 基本概念 这里要明确一点,HTTP/HTTPS是应用层协议,而socket一般指TCP/UDP协议,也就是在传输层中,而IP协议是在网络层中! 这个实例主要是撸socket ...

  4. Qt文档阅读笔记|Qt实践| HTTPS知识点-获取某站点SSL证书

    目录 基本概念 代码与实例 基本概念 这里要先介绍几个类和函数 首先是QSslSocket:这个类提供了客户端和服务器之间的SSL加密socket连接.这个是基于TCP连接,可以传输加密数据,支持的协 ...

  5. Qt实践|HTTP知识点-使用百度AI语音识别服务

    目录 基本概念 代码与实例 基本概念 这里来简单介绍下百度的REST API文档,首先是获取Access Token 获取到了后,再发送请求,进行语音识别. 这里我采用Raw方式上传 这个就是百度AI ...

  6. Qt实践3: 图片浏览器

    Qt实现图片浏览器 Qt实践3: 图片浏览器 引言 因课程教学,需要利用Qt做图形界面设计(GUI).自学Qt两月有余,发现现有很多资料,讲述C++程序设计QT项目的较多,不利于新手入门,特别是对于C ...

  7. qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片

    qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  8. 【机器视觉】Qt联合Halcon编程之显示图片

    00. 目录 文章目录 00. 目录 01. 概述 02. 编写Halcon程序 03. Halcon程序导出C++文件 04. 创建Qt图形界面项目 05. Qt集成Halcon程序 06. 附录 ...

  9. 【Qt】2D绘图之绘制图片

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...

最新文章

  1. Magic Leap有新动态!成立由斯蒂芬森领头的内容团队
  2. android实现计时器
  3. with(nolock)简解
  4. Chapter 5 Blood Type——33
  5. Sound recording and encoding in MP3 format.
  6. hihoCoder 1388(fft)
  7. nodejs后台系列--第四篇--koa(二)
  8. 2022 CVPR 三维人体重建相关论文汇总(3D Human Reconstruction)
  9. B站高清视频下载方法揭密
  10. IDM6.39序列号,亲测可用
  11. 体胖还需勤跑步,人丑就该多读书!
  12. python输入个人所得税计算_Python实现的个人所得税计算器
  13. java 口袋算法_【算法笔记】递归(神奇的口袋)
  14. [IOI2018]组合动作——构造
  15. 螃蟹在剥我的壳,笔记本在写我。 漫天的我落在枫叶上雪花上。 而你在想我。
  16. [POI2012]HUR-Warehouse Store(贪心,堆)
  17. Delphi with Lua5.1.3
  18. vue3组件之间通信(三)——爷孙组件传递属性和方法
  19. 基于PHP+小程序(MINA框架)+Mysql数据库的篮球、足球、羽毛球等校园运动场地预约小程序系统设计与实现
  20. 表白墙网站php源码,自适应响应式表白墙网站PHP源码 带后台管理

热门文章

  1. 方法的直接调用,反射调用与……Lambda表达式调用
  2. Windows2003 安装AD失败,未能为域创建GPO,出现了扩展错误 的解决方法
  3. 确保您的Silverlight 1.0运行时间组件是最新版本
  4. 入行十年,总结出了数据仓库、数据集市、数据库的精华,你一定不能错过
  5. WDM驱动程序入门(很详细)
  6. 在不了解这5种语言以后就可能永远要消失在世界上了
  7. 什么是 Python?我介绍我几年前学习Python的方法和经验
  8. C/C++基础知识10道题,你都会吗?
  9. 程序员上班都在做什么?
  10. 分支界限法0 1背包 c语言,分支限界法之布线问题(1)