目录
基本概念
这个是接入了某识别验证码系统,这个验证码系统有很多的接口,其中就有VC++接口,但个人觉得,这个接口不太好,因为本人想用C++ Qt框架实现,而这个Qt框架的最大特点就是跨平台,所以本人选择了他的HTTP接口,正巧,自己也在学习HTTP。
HTTP的接口使用很频繁,在RabbitMQ中,本人也看到了HTTP接口,写客户端的时候可以直接根据HTTP接口和RabbitMQ进行通信。再后面的博文中将会给出。
下面来看下某打码系统关于余额查询的API文档:
他的返回值如下:
sign计算如下:
代码与实例
这里首先来看看我WEB上的余额:
这里来看看发包和回包:
个人觉得这个sign就是防止数据包被篡改而增加的MD5校验
程序运行截图如下:
源码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QDateTime>
#include <QNetworkRequest>
#include <QCryptographicHash>
#include <QString>
#include <QObject>
#include <QHttpPart>
#include <QHttpMultiPart>
#include <QJsonDocument>
#include <QMap>
#include <QEventLoop>
#include <QUrl>
const QString userPID = ""; //去系统里面查
const QString PDKey = ""; //去系统里面查
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/custval";
request->setRawHeader("Content-Type", "application/x-www-form-urlencoded");
request->setUrl(requestStr);
//parameter
uint currentTime = QDateTime::currentDateTime().toTime_t();
QCryptographicHash md51(QCryptographicHash::Md5);
QCryptographicHash md52(QCryptographicHash::Md5);
QString md51Str = QString::number(currentTime) + PDKey;
md51.addData(md51Str.toUtf8());
QString md52Str = userPID + QString::number(currentTime) + QString(md51.result().toHex());
md52.addData(md52Str.toUtf8());
QString body = QString("user_id=%1×tamp=%2&sign=%3").arg(116107).arg(currentTime).arg(QString(md52.result().toHex()));
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 manager;
delete request;
qDebug() << "finished!";
return a.exec();
}