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

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

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

如下代码:

cpp 复制代码
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"));
}

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

bash 复制代码
tcpSocket->waitForReadyRead();

照成wait的原因的是:

cpp 复制代码
body.size() != contentLength

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

修改成如下即可:

cpp 复制代码
body.toUtf8().size() != contentLength

完整修改如下:

cpp 复制代码
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"));
}
相关推荐
0_0梅伊阁诗人1 小时前
Django ORM 模型
开发语言·数据库·笔记·python·oracle·django
m0_578267862 小时前
从零开始的python学习(九)P142+P143+P144+P145+P146
笔记·python·学习
zqy02272 小时前
HTTP的Web服务测试在Python中的实现
python·网络协议·http
axban2 小时前
QT M/V架构开发实战:M/V架构的初步认识
开发语言·数据库·qt
大可门耳3 小时前
Qt的数据库模块介绍,Qt访问SQLite详细示例
数据库·qt·sqlite
easy20204 小时前
Kaggle项目实践——Titanic: Machine Learning from Disaster
笔记·学习·机器学习
The_Second_Coming4 小时前
容器应用学习笔记:containerd 篇
运维·笔记·学习·容器·containerd
axban5 小时前
QT M/V架构开发实战:QAbstractItemModel介绍
java·数据库·qt
HainesFreeman5 小时前
书籍成长书籍文字#创业付费杂志《财新周刊》2025最新合集 更33期
笔记
草丛中的蝈蝈6 小时前
qt中给QListWidget添加上下文菜单(快捷菜单)
开发语言·qt