Qt实践| HTTP知识点-接入某图片验证码系统识别验证码
目录
基本概念
代码与实例
基本概念
这里有一个查询余额的: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×tamp=%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知识点-接入某图片验证码系统识别验证码相关推荐
- Qt实践| HTTP知识点-接入某图片验证码系统查询余额
目录 基本概念 代码与实例 基本概念 这个是接入了某识别验证码系统,这个验证码系统有很多的接口,其中就有VC++接口,但个人觉得,这个接口不太好,因为本人想用C++ Qt框架实现,而这个Qt框架的最大 ...
- Qt实践| HTTP知识点-Qt填充referer请求头盗取图片
目录 基本概念 代码与实例 基本概念 HTTP协议头中的Referer主要是用来让服务器判断来源页面,即用户是从那个页面来的.网站通常用其来统计用户来源,看用户是从搜索页面来的,还是从其他网站链接来的 ...
- Qt实践|HTTPS知识点-SSL socket获取百度首页
目录 基本概念 代码与实例 基本概念 这里要明确一点,HTTP/HTTPS是应用层协议,而socket一般指TCP/UDP协议,也就是在传输层中,而IP协议是在网络层中! 这个实例主要是撸socket ...
- Qt文档阅读笔记|Qt实践| HTTPS知识点-获取某站点SSL证书
目录 基本概念 代码与实例 基本概念 这里要先介绍几个类和函数 首先是QSslSocket:这个类提供了客户端和服务器之间的SSL加密socket连接.这个是基于TCP连接,可以传输加密数据,支持的协 ...
- Qt实践|HTTP知识点-使用百度AI语音识别服务
目录 基本概念 代码与实例 基本概念 这里来简单介绍下百度的REST API文档,首先是获取Access Token 获取到了后,再发送请求,进行语音识别. 这里我采用Raw方式上传 这个就是百度AI ...
- Qt实践3: 图片浏览器
Qt实现图片浏览器 Qt实践3: 图片浏览器 引言 因课程教学,需要利用Qt做图形界面设计(GUI).自学Qt两月有余,发现现有很多资料,讲述C++程序设计QT项目的较多,不利于新手入门,特别是对于C ...
- qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片
qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...
- 【机器视觉】Qt联合Halcon编程之显示图片
00. 目录 文章目录 00. 目录 01. 概述 02. 编写Halcon程序 03. Halcon程序导出C++文件 04. 创建Qt图形界面项目 05. Qt集成Halcon程序 06. 附录 ...
- 【Qt】2D绘图之绘制图片
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...
最新文章
- Magic Leap有新动态!成立由斯蒂芬森领头的内容团队
- android实现计时器
- with(nolock)简解
- Chapter 5 Blood Type——33
- Sound recording and encoding in MP3 format.
- hihoCoder 1388(fft)
- nodejs后台系列--第四篇--koa(二)
- 2022 CVPR 三维人体重建相关论文汇总(3D Human Reconstruction)
- B站高清视频下载方法揭密
- IDM6.39序列号,亲测可用
- 体胖还需勤跑步,人丑就该多读书!
- python输入个人所得税计算_Python实现的个人所得税计算器
- java 口袋算法_【算法笔记】递归(神奇的口袋)
- [IOI2018]组合动作——构造
- 螃蟹在剥我的壳,笔记本在写我。 漫天的我落在枫叶上雪花上。 而你在想我。
- [POI2012]HUR-Warehouse Store(贪心,堆)
- Delphi with Lua5.1.3
- vue3组件之间通信(三)——爷孙组件传递属性和方法
- 基于PHP+小程序(MINA框架)+Mysql数据库的篮球、足球、羽毛球等校园运动场地预约小程序系统设计与实现
- 表白墙网站php源码,自适应响应式表白墙网站PHP源码 带后台管理
热门文章
- 方法的直接调用,反射调用与……Lambda表达式调用
- Windows2003 安装AD失败,未能为域创建GPO,出现了扩展错误 的解决方法
- 确保您的Silverlight 1.0运行时间组件是最新版本
- 入行十年,总结出了数据仓库、数据集市、数据库的精华,你一定不能错过
- WDM驱动程序入门(很详细)
- 在不了解这5种语言以后就可能永远要消失在世界上了
- 什么是 Python?我介绍我几年前学习Python的方法和经验
- C/C++基础知识10道题,你都会吗?
- 程序员上班都在做什么?
- 分支界限法0 1背包 c语言,分支限界法之布线问题(1)