qt开发http通讯需要引入的模块与类
pro
QT += network
h
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <QNetworkReply>
QNetworkAccessManager *manager;
cpp
manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
具体实现
//post操作
QNetworkRequest request;
QString url="http://"+hHost+":"+QString::number(postPort)+"/cctrl/Channel/equipmentState";
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
request.setRawHeader("Content_Type","application/json");
QJsonObject logjson;
logjson.insert("gateNo",sSBBH);
logjson.insert("infraredState",yxzt.mid(0,1));
logjson.insert("videoState",yxzt.mid(1,1));
logjson.insert("organismsState",yxzt.mid(2,1));
logjson.insert("IPCState",yxzt.mid(3,1));
logjson.insert("frontDoorState",yxzt.mid(4,1));
logjson.insert("backDoorState",yxzt.mid(5,1));
logjson.insert("frontDoorIsOpen",yxzt.mid(6,1));
logjson.insert("backDoorIsOpen",yxzt.mid(7,1));
//在json中插入图片base64格式:
QImage img;
img.load(picPath+zjhm+"/zp.jpg");
QByteArray ba;
QBuffer buf(&ba);
img.save(&buf,"png",20);
QByteArray hexed=ba.toBase64();
QString pic(hexed);
buf.close();
logjson.insert("certImg",pic);
QJsonDocument doc;
doc.setObject(logjson);
QByteArray bdata=doc.toJson(QJsonDocument::Compact);
manager->post(request,bdata);
//接收返回数据的槽函数
void Widget::replyFinished(QNetworkReply *reply)
{
if(reply->error()==QNetworkReply::NoError)
{
qDebug()<<"operation:"<<reply->operation();
qDebug()<<"status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"url:"<<reply->url();
const QByteArray reply_data=reply->readAll();
qDebug()<<"read all:"<<reply_data;
QJsonParseError json_error;
QJsonDocument document = QJsonDocument::fromJson(reply_data,&json_error);
if(json_error.error==QJsonParseError::NoError)
{
if(document.isObject())
{
const QJsonObject obj = document.object();
qDebug()<<"obj:"<<obj;
if(obj.contains("Accept-Language"))
{
QJsonValue value = obj.value("Accept-Language");
qDebug()<<"value"<<value;
}
}
}
else
qDebug()<<"json error:"<<json_error.errorString();
}
reply->deleteLater();
}
pro
QT += network
h
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <QNetworkReply>
QNetworkAccessManager *manager;
cpp
manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
具体实现
//post操作
QNetworkRequest request;
QString url="http://"+hHost+":"+QString::number(postPort)+"/cctrl/Channel/equipmentState";
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
request.setRawHeader("Content_Type","application/json");
QJsonObject logjson;
logjson.insert("gateNo",sSBBH);
logjson.insert("infraredState",yxzt.mid(0,1));
logjson.insert("videoState",yxzt.mid(1,1));
logjson.insert("organismsState",yxzt.mid(2,1));
logjson.insert("IPCState",yxzt.mid(3,1));
logjson.insert("frontDoorState",yxzt.mid(4,1));
logjson.insert("backDoorState",yxzt.mid(5,1));
logjson.insert("frontDoorIsOpen",yxzt.mid(6,1));
logjson.insert("backDoorIsOpen",yxzt.mid(7,1));
//在json中插入图片base64格式:
QImage img;
img.load(picPath+zjhm+"/zp.jpg");
QByteArray ba;
QBuffer buf(&ba);
img.save(&buf,"png",20);
QByteArray hexed=ba.toBase64();
QString pic(hexed);
buf.close();
logjson.insert("certImg",pic);
QJsonDocument doc;
doc.setObject(logjson);
QByteArray bdata=doc.toJson(QJsonDocument::Compact);
manager->post(request,bdata);
//接收返回数据的槽函数
void Widget::replyFinished(QNetworkReply *reply)
{
if(reply->error()==QNetworkReply::NoError)
{
qDebug()<<"operation:"<<reply->operation();
qDebug()<<"status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"url:"<<reply->url();
const QByteArray reply_data=reply->readAll();
qDebug()<<"read all:"<<reply_data;
QJsonParseError json_error;
QJsonDocument document = QJsonDocument::fromJson(reply_data,&json_error);
if(json_error.error==QJsonParseError::NoError)
{
if(document.isObject())
{
const QJsonObject obj = document.object();
qDebug()<<"obj:"<<obj;
if(obj.contains("Accept-Language"))
{
QJsonValue value = obj.value("Accept-Language");
qDebug()<<"value"<<value;
}
}
}
else
qDebug()<<"json error:"<<json_error.errorString();
}
reply->deleteLater();
}