在刚接触QT时第一个任务就是进行http请求,现在才开始记录,可能会有遗漏的点。
一、post请求
在.pro文件中
QT += network
在.h文件中添加对应的头文件
#include <QWidget>
#include <QObject>
#include <QDebug>
#include <QHttpMultiPart>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QMetaObject>
#include <QEventLoop>
#include <QJsonDocument> //以下是json数据传送所需头文件
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
在.cpp中
/*
功能说明:post请求
参数说明:key - 加密的密钥
data - 加密的参数
返 回:无
*/
void GaodePost::PostRequest(QString key,QString data)
{
QJsonObject dataobj; //构建json对象dataobj
dataobj.insert("key",key);
dataobj.insert("data",data);
QJsonDocument document;
document.setObject(dataobj);
QByteArray byte_array = document.toJson(QJsonDocument::Compact); //类型转换
//http请求
QNetworkRequest request1;
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::finished, this, &GaodePost::receiveGaodePostReply);
request1.setUrl(QUrl("http://123.12.365.152/接口名")); //要请求的网址
//请求头token设置
request1.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));
QString token = "xxxxxxxxxxxxxxxxxxxxxxxx";
QString token_headerData = token;
request1.setRawHeader("token",token_headerData.toLocal8Bit());
QNetworkReply* reply = nam.post(request1, byte_array); //post请求头+传输的数据
//开启事件循环,直到请求完成
QEventLoop loop;
connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);
loop.exec();
}
//接收请求返回的数据
QString GaodePost::receiveGaodePostReply(QNetworkReply *reply)
{
QString res = reply->readAll();
return res;
}
二、get请求文章来源:https://www.toymoban.com/news/detail-509215.html
.pro和.h文件和post请求一样,在.cpp中文章来源地址https://www.toymoban.com/news/detail-509215.html
//get请求
void GaodeGet::GetRequest()
{
QNetworkRequest request1;
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::finished, this, &GaodeGet::receiveGaodeGetReply);
//get与post的请求方式有所不同,get是在接口名后添加 ? 和传输的数据(type)
request1.setUrl(QUrl("http://123.12.365.152/接口名?type"));
request1.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));
QString token = "xxxxxxxxxxxxxxxxxxxxxxxx";
QString token_headerData = token;
request1.setRawHeader("token",token_headerData.toLocal8Bit());
QNetworkReply *reply = nam.get(request1); //get请求头
//开启事件循环,直到请求完成
QEventLoop loop;
connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);
loop.exec();
}
//接收get请求返回的数据
void GaodeGet::receiveGaodeGetReply(QNetworkReply *reply)
{
QString res = reply->readAll();
qDebug() << "GaoDeWidget::receiveReply_get recive:" << res;
}
到了这里,关于QT进行http请求(post/get)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!