一.问题记录
1.请求头查询(使用QUrlQuery而不是setRawHeader)。
2.查询无返回结果(增加libcrypto-1_1.dll、libssl-1_1.dll)。
3.发送图片(QImage转base64)。
二.代码(阿里云)
2.1 Post请求
#include <QtNetwork>
#include <QUrlQuery>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QEventLoop>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString host = "https://vidface.market.alicloudapi.com";
QString path = "/lundear/idface";
QString method = "POST";
QString appcode = "你自己的AppCode";
QUrl url(host + path);
QNetworkRequest request(url);
request.setRawHeader("Authorization", QString("APPCODE " + appcode).toUtf8());
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded; charset=UTF-8");
QUrlQuery postData;
postData.addQueryItem("idcard", "110221197802151611");
postData.addQueryItem("image", "%2F9j%2F4AAQSkZJRgABAQEAYABgAA");
postData.addQueryItem("liveck", "0");
postData.addQueryItem("name", "%E5%BC%A0%E4%BC%9F");
postData.addQueryItem("url", "url");
QNetworkAccessManager manager;
QNetworkReply *reply = manager.post(request, postData.query(QUrl::FullyEncoded).toUtf8());
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QByteArray response = reply->readAll();
qDebug() << response;
reply->deleteLater();
return a.exec();
}
2.2 解析json
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QDebug>
int main()
{
QString jsonStr = R"({
"code": 0,
"desc": "身份证号与姓名匹配,照片系统判断为同一人",
"similarity": 95,
"data": {
"birthday": "1993-03-02",
"address": "浙江省-丽水市-莲都区",
"sex": "男"
}
})";
// 解析JSON
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr.toUtf8(), &error);
if (error.error != QJsonParseError::NoError) {
qDebug() << "JSON解析错误:" << error.errorString();
return 1;
}
// 转换为对象
QJsonObject jsonObj = jsonDoc.object();
// 获取字段值
int code = jsonObj["code"].toInt();
QString desc = jsonObj["desc"].toString();
int similarity = jsonObj["similarity"].toInt();
QJsonObject dataObj = jsonObj["data"].toObject();
QString birthday = dataObj["birthday"].toString();
QString address = dataObj["address"].toString();
QString sex = dataObj["sex"].toString();
// 打印结果
qDebug() << "code:" << code;
qDebug() << "desc:" << desc;
qDebug() << "similarity:" << similarity;
qDebug() << "birthday:" << birthday;
qDebug() << "address:" << address;
qDebug() << "sex:" << sex;
return 0;
}