当前位置: 首页 > article >正文

Qt笔记-获取HTTP的POST请求提交的数据时需要注意的地方(2024-09-02)

此篇发布到互联网上的时间为:2024-11-25

这里总结下来还是编码的问题。

如下代码:

else if(method == "POST"){

    int contentLength = DataAnaylsisTool::getHttpHeaderValue(msg.toLower(), "content-length").toInt();
    QString body = DataAnaylsisTool::getHttpBody(msg);

    while(body.size() != contentLength){

        tcpSocket->waitForReadyRead();
        qint64 available = tcpSocket->bytesAvailable();
        QString bodyMsg = tcpSocket->read(available);
        body += bodyMsg;
    }

    json = interface->postResponse(body);
    json->insertValue("code", 20000);
    json->insertValue("time", QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
}

其中总是会卡住,原因是:

tcpSocket->waitForReadyRead();

照成wait的原因的是:

body.size() != contentLength

这里就是编码有问题,http中body的数据长度和http头的Content-Length不一样。特别是前端提交的数据带中文时。在大多数情况下,前端提交的数据都是utf8编码,而Qt的编码规则默认情况下操作系或登陆的用户有关。所以在Qt5下需要特别的指定(Qt4也需要,只是比Qt5麻烦下,多几行代码)。

修改成如下即可:

body.toUtf8().size() != contentLength

完整修改如下:

else if(method == "POST"){

    int contentLength = DataAnaylsisTool::getHttpHeaderValue(msg.toLower(), "content-length").toInt();
    QString body = DataAnaylsisTool::getHttpBody(msg);

    while(body.toUtf8().size() != contentLength){

        tcpSocket->waitForReadyRead();
        qint64 available = tcpSocket->bytesAvailable();
        QString bodyMsg = tcpSocket->read(available);
        body += bodyMsg;
    }

    json = interface->postResponse(body);
    json->insertValue("code", 20000);
    json->insertValue("time", QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
}


http://www.kler.cn/a/410392.html

相关文章:

  • 【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register
  • 数据库的联合查询
  • 浏览器缓存与协商缓存
  • Apple Vision Pro开发003-PolySpatial2.0新建项目
  • 【Excel】拆分多个sheet,为单一表格
  • vue-office:word(.docx)、pdf、excel(.xlsx,.xls)格式文件预览
  • 加菲工具 - 好用免费的在线工具集合
  • newpipe搜索崩溃Ljava/lang/String;Ljava/nio/charset/Charset;
  • 多维数组与特殊矩阵:存储与压缩
  • wkhtmltopdf的安装与使用
  • 【参会邀请】第二届大数据与数据挖掘国际会议(BDDM 2024)邀您相聚江城!
  • 高标准农田智慧农业系统建设方案
  • 数字信号处理实验报告四:IIR数字滤波器设计及软件实现
  • 【spark】pyspark kerberos 案例,即pyspark-utils客户端工具类
  • CentOS7卸载node
  • C51相关实验
  • 基于RAG的text2sql解决方案vanna-ai 私有化部署使用实战
  • 【已解决】python面试、竞赛编程问题:最长递增子序列和旅行商问题(TSP)
  • C 语言学习-06【指针】
  • 探索1688关键词API接口:Python爬虫的高效之旅
  • I2C学习
  • Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
  • 【C#】CancellationTokenSource 为任务或线程提供一种优雅的方式来支持取消操作
  • HTML飞舞的爱心
  • 使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据
  • Cocos creator 3.8 一些事件的使用,加载预制体的两种方式 5