使用QT实现http里面的get和post

这篇具有很好参考价值的文章主要介绍了使用QT实现http里面的get和post。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用QT实现http里面的get和post,QT,qt,http,java

#1024程序员节|参与投稿,赢限定勋章和专属大奖#

#假如你有一台服务器,你最想做哪些事?#

#你被什么样的BUG困扰过一周以上?#

在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意,这些函数不是由编程语言实现的,而是由HTTP协议规定的。因此,无论使用哪种编程语言进行HTTP通信,都可以使用这些函数和响应代码进行发送和接收操作。

请求相关函数:

  1. GET:用于请求指定的资源。
  2. POST:用于向指定资源提交数据,请求服务器进行处理。
  3. PUT:用于更新指定资源的内容。
  4. DELETE:用于删除指定资源。
  5. HEAD:与GET方法类似,但不返回响应体,只获取HTTP头信息。
  6. OPTIONS:用于获取目标资源支持的通信选项。
  7. CONNECT:用于建立网络连接以供隧道传输。
  8. TRACE:用于进行消息回环测试。

响应相关函数:

  1. 200 OK:表示成功响应,请求已成功被处理。
  2. 201 Created:表示成功创建了新资源。
  3. 202 Accepted:表示请求已被接受,继续处理。
  4. 204 No Content:表示成功处理了请求,但无响应体内容。
  5. 301 Moved Permanently:表示资源已被永久移动到新位置。
  6. 302 Found:表示资源已被临时移动到新位置。
  7. 303 See Other:表示由于其他位置的响应可能更适合,建议查看其他位置。
  8. 304 Not Modified:表示请求的资源未被修改,客户端可继续使用缓存的版本。
  9. 400 Bad Request:表示请求格式错误或请求无法被服务器理解。
  10. 401 Unauthorized:表示请求需要身份验证,但未提供认证信息。
  11. 403 Forbidden:表示请求被服务器拒绝,即使提供了认证信息也不允许访问。
  12. 404 Not Found:表示请求的资源不存在。
  13. 500 Internal Server Error:表示服务器内部错误,无法完成请求。
  14. 501 Not Implemented:表示服务器不支持请求的方法。
  15. 502 Bad Gateway:表示作为网关或代理服务器时,服务器从上游服务器接收到的响应是无效的。
  16. 503 Service Unavailable:表示服务器暂时不可用,无法处理请求。

在这里用QT来演示一哈如何使用http协议,获取和传递信息:

具体代码如下所示:

使用QNetworkRequest来实现get

  //生成对应的网络请求
    QNetworkRequest request;
    QString requestHeader = "http://你自己的网址";
    QString fullRequest = requestHeader;
    request.setUrl(QUrl(fullRequest));

    //发送Get请求
    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get(request);
    QEventLoop eventLoop;//开启一个事件,当这个事件接收到完成的信号的时候,就结束循环
    QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit()));
    eventLoop.exec(QEventLoop::ExcludeUserInputEvents);

    //对请求的返回异常进行处理
    if(reply->error() != QNetworkReply::NoError)
    {
        qDebug()<<reply->error();
    }

    // 获取http状态码
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    qDebug()<<"状态码:"<<statusCode;

    //解析返回的Json结果
    QByteArray replyData = reply->readAll();
    QJsonParseError json_error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
    if(json_error.error != QJsonParseError::NoError)
    {
        qDebug()<< "error";
    }
    if(!jsonDoc.isNull()) {
        if(jsonDoc.isObject()) {
            QJsonObject jsonObj = jsonDoc.object();
            int code = jsonObj["code"].toInt();

            qDebug() << "code: " << code;
            return uuid;
        } else {
            qDebug() << "Invalid JSON object";
        }
    } else {
        qDebug() << "Failed to parse JSON";
    }

使用QNetworkRequest来实现post功能

//生成对应的网址请求
    QNetworkRequest request;

    QString fullRequest = "http://你的网址";
    request.setUrl(QUrl(fullRequest));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");//因为QT和java的请求头不一致
    request.setRawHeader(QByteArray("键"), "值");//这里是设置非标准的请求头
    // 查看请求头
    qDebug()<<request.rawHeaderList();
    // 创建一个QJsonArray
    QJsonArray jsonArray;
    jsonArray.append(0);
    jsonArray.append(1);
    jsonArray.append(2);
    //传入josn
    QJsonObject object;
    object.insert("1","");//
    object.insert("test",jsonArray);//利用QJsonArray可以传入数组
    object.insert("page",1);
    QJsonDocument document;
    document.setObject( object );
    QByteArray array = document.toJson( QJsonDocument::Compact );

    qDebug()<<object;

    //发送请求
    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.post(request,array);
    QEventLoop eventLoop;
    QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit()));
    eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
    if(reply->error() != QNetworkReply::NoError)
    {
        qDebug()<< reply->error();
    }
    // 获取http状态码
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    qDebug()<<"状态码:"<<statusCode;
    //解析返回的Json结果
    QByteArray replyData = reply->readAll();
    QJsonParseError json_error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
    if(json_error.error != QJsonParseError::NoError)
    {
        qDebug()<<json_error.error<<replyData;
    }
    QJsonObject rootObj = jsonDoc.object();
    QJsonValue val = rootObj.value("code");//返回的代码,因为是double类型的所以不能转换成QString

在post里面要注意,有的参数需要提交,需要借助QJsonObject转变成 QByteArray。需要注意数据格式的问题,比如数组要转换成json的格式,毕竟C++和java是两种语言。另外,如果要在QT里面使用上述代码,还要记得包含以下的头文件,不然会报错:

#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QTcpSocket>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QByteArray>

另外,在 Qt 库中,QJsonValue 实际上可以是一种通用的 JSON 数据类型,包括数组和对象。因此,将 QJsonValue 转换为 QJsonArray 并不总是一个明确的过程。然而,如果你确定该 QJsonValue 实际上是一个 JSON 数组,那么可以使用 QJsonValue::toArray() 方法将其转换为 QJsonArray

QT通过http的post上传带有参数的文件到指定网址。

实现代码如下:文章来源地址https://www.toymoban.com/news/detail-722199.html

QString token="验证指令";
    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);//定义multi的方式
    // 创建一个QNetworkAccessManager对象,用于处理网络请求
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QString file_path="上传的文件路径";
    QFileInfo info(file_path);
    if(!info.isFile())
    {
        qDebug()<<"文件路径异常";
    }
    QFile *file = new QFile(file_path);
    bool  read=file->open(QIODevice::ReadOnly);
    if(read)
    {
        qDebug()<<"4";
    }
    QString http="上传文件地址";
    QString prodorderno,sort,code,filesort;
    prodorderno="生产单号";
    sort="类别";
    code="代码编号";
    filesort="文件顺序";

    QString uploadFileName = file_path;//获取文件路径
    qDebug()<<uploadFileName<<"     "<<http;
    // 创建一个QNetworkRequest对象,使用指定的URL
    QNetworkRequest request(http);
//    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/form-data");//就是这个地方,因为多写了这句代码,所以一直出错,无法解决
    request.setRawHeader(QByteArray("Authorization"), token.toLatin1());//用于验证使用的token

    //Post请求参数方法,一个参数为一个QHttpPart
    QHttpPart filePart1;
        filePart1.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
        filePart1.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"code\""));
        filePart1.setBody(code.toLatin1());
        multiPart->append(filePart1);

        QHttpPart filePart2;
        filePart2.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
        filePart2.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"fileSort\""));
        filePart2.setBody(filesort.toLatin1());
         multiPart->append(filePart2);

        QHttpPart filePart3;
        filePart3.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
        filePart3.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"prodorderno\""));
        filePart3.setBody(prodorderno.toLatin1());
        multiPart->append(filePart3);

        QHttpPart filePart4;
        filePart4.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
        filePart4.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"sort\""));
        filePart4.setBody(sort.toLatin1());
        multiPart->append(filePart4);

        QHttpPart filePart5;
        filePart5.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream"));
        QString header=QString("form-data; name=\"file\"; filename=\""+info.fileName()+"\"");//application/octet-stream
        filePart5.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(header));
        filePart5.setBodyDevice(file);
        file->setParent(multiPart);
        multiPart->append(filePart5);
        qDebug()<<QNetworkRequest::ContentTypeHeader;



//***********************************************************
    // 创建一个QNetworkReply对象,用于接收上传的响应
    QNetworkReply *reply = manager->post(request, multiPart);
    QEventLoop eventLoop;
    QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit()));
    eventLoop.exec();//QEventLoop::ExcludeUserInputEvents,不添加这个,是为了防止断网,软件卡死
    // 获取http状态码
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    qDebug()<<"状态码:"<<statusCode;
            //解析返回的Json结果
            QByteArray replyData = reply->readAll();
    QJsonParseError json_error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
    if(json_error.error != QJsonParseError::NoError)
    {
        qDebug()<<json_error.error<<replyData;
    }
    QJsonObject rootObj = jsonDoc.object();
    QString codeStr = rootObj.value("code").toString();
    qDebug()<<rootObj;

到了这里,关于使用QT实现http里面的get和post的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt Http请求,post和get的两种方式

    今天我们介绍一下QT的http请求,这里有post和get两种方式 一、post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定 二、get请求方式:参数和网址拼接到一起请求 三、主要区别: get用于请求获取数据,post向指定的资源创建修改数据 g

    2024年02月15日
    浏览(49)
  • Qt实现http服务来接收post协议的数据

    要在Qt中接收HTTP POST协议的数据,你可以使用Qt的网络模块和HTTP类来处理请求。下面是一个简单的示例,展示了如何使用Qt实现接收HTTP POST请求的数据: 在这个示例中,我们创建了一个继承自QTcpServer的HttpServer类来处理HTTP请求。当有新的连接请求到达时,incomingConnection函数会

    2024年02月08日
    浏览(36)
  • (Qt) Http之Get请求使用基础

    http的操作是网络通信中非常常见的操作,其中广泛使用get,post两种操作。 本文将对Qt中,http的get请求做简单应用,来进行展示。 这里不做排版了,不然篇幅过大 [1] QNetworkAccessManager 对于每个 reply 的 finish 都会发送 finished 的信号。 如果一个 manager 处理多个请求可能会出现先

    2024年02月12日
    浏览(41)
  • 【LibCurl】C++使用libcurl实现HTTP POST和GET、PUT

    libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证 libcurl的官网: http://curl.haxx.se/ 库下载地址: https://github.com/curl/curl/releases/tag/curl-7_71_1 初

    2024年04月17日
    浏览(98)
  • Java发送HTTP GET/POST请求

    在这篇文章中,将向你展示四种发送Http的GET/POST的例子,如下: 在Java11的java.net.http.*包中,有一个HttpClient类可以完成HTTP请求。 Java11HttpClientExample.java 本例使用HttpURLConnection(http)和HttpsURLConnection(https) HttpURLConnectionExample.java 使用Apache HttpClient完成HTTP请求的发送需要添加Maven依赖

    2024年02月13日
    浏览(45)
  • Java http GET POST 请求传参

    HTTP POST请求传参方式 方式一: 方式二 HTTP GET请求传参方式

    2024年02月15日
    浏览(47)
  • java调用http接口(get请求和post请求)

    1.http接口的格式如下: 图片选择失败,我只能把数据贴出来,如果有不懂的可以问我哈。 http://localhost:8881/department/getDepartmentList接口数据如下:(请求方式是GET) http://localhost:8881/department/getDataById?id=3接口数据如下:(请求方式是POST) 2.需要引入的包有: 3.实现方法如下:

    2024年02月13日
    浏览(53)
  • java http get post 和 发送json数据请求

    浏览器请求效果       main调用  

    2024年02月16日
    浏览(50)
  • 嵌入式Qt中实现http服务接收POST请求

    嗨喽,大家好!以下知识点做个简单记录分享给小伙伴们! 首先我们来理解几个概念 “ WebSocket服务器和HTTP服务器是两种不同的服务器类型,它们在协议、连接方式和通信模式等方面有所区别。 协议:HTTP服务器使用HTTP协议进行通信,而WebSocket服务器使用WebSocket协议。HTTP协

    2024年02月20日
    浏览(40)
  • curl c++ 实现HTTP GET和POST请求

    环境配置 curl //DV2020T环境下此步骤可省略 https://curl.se/download/ 笔者安装为7.85.0版本 ./configure --without-ssl make sudo make install sudo rm /usr/local/lib/curl 系统也有curl库,为防止冲突,删去编译好的curl库。 对以json数据的解析使用开源项目:https://github.com/nlohmann/json cd single_include 在这个文

    2024年03月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包