QT进行http请求(post/get)

在刚接触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请求

.pro和.h文件和post请求一样,在.cpp中

//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;
}

  • 21
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值