最近,我们从事QT网络通信。
对于HTTP协议,我们需要将检测数据上传到政府部门的后端系统。
他们使用HTTP表单格式进行上传。
为了确保我的数据可以上传到后端,我使用POSTMAN来模拟此过程,以确保可以通过POSTMAN上传,然后开始编写QT程序。
可以说编写这个程序遇到了很多麻烦。
首先,我参考官方网站上的演示:官方网站源代码如下:QHttpMultiPart * multiPart = new QHttpMultiPart(QHttpMultiPart :: FormDataType); QHttpPart textPart; textPart.setHeader(QNetworkRequest :: ContentDispositionHeader,QVariant(“ quot;形式数据;名称=“文本”)); textPart.setBody(“我的文本”); QHttpPart imagePart; imagePart.setHeader(QNetworkRequest :: ContentTypeHeader,QVariant(“ image / jpeg”))); imagePart .setHeader(QNetworkRequest :: ContentDispositionHeader,QVariant(“ form-data; name =” image“”))); QFile * file = new QFile(“ image.jpg”); file-> open(QIODevice: :ReadOnly); imagePart.setBodyDevice(file); file-> setParent(multiPart); //我们现在无法删除文件,因此请使用multiPartmultiPart-& gt; append(textPart); multiPart-& gtappend(imagePart); QUrl url(“ http://my.server.tld” ;); QNetworkRequest请求(URL); QNetworkAccessManager管理器; QNetworkReply * reply = manager.post(request,multiPart); multiPart-& gt; setParent(reply); //删除带有回复的multiPart //在此处连接信号等。
此演示非常简单,请参见此处connect s末尾的句子ignals等,然后没有更多文本。
。
。
。
然后在百度上进行的各种搜索都发现,由于格式问题或各种内存泄漏,导致99%的文字无法使用。
。
。
我上传到后台的数据主要具有以下参数:参数使用形式参数1设备序列号形式参数2时间和日期形式参数3设备编号形式参数4检测GPS位置形式参数5危险品类型形式参数六种检测方式形式参数七个危险品阈值形式参数八个时间戳最后,我只能自己慢慢研究它,所以我写了一个POST专用界面,具体代码如下:(PS:由于工作职位特殊,性别,我很不方便在这里公开平台的URL,对不起!)该程序使用QEventLoop来实现事物的循环,上传数据并同时从服务器读取消息的答复,但是如果您使用,请在这里注意:eventLoop.exec( QEventLoop :: ExcludeUserInputEvents);当网络出现问题或网络断开连接时,调用此接口将导致程序崩溃(请参阅Qt Http程序包)。
如果您不希望崩溃导致用户界面无法运行,则可以这样做。
eventLoop.exec();当我想调用POST接口时,我仅需要执行以下操作:this-> Uploader_Para(``1'',``2019-10-14 11:04:06'',``30100218060004'',``113.06287 ;“ 116.22354”,“ TNT型炸药”,“入站检测”,“ 12345”,“ 1.635”);执行完程序后,我发送的数据可以在后台接收,并成功提交到表单中的后台。
这意味着我从头到尾都折腾了很长时间,我真的很累。
我在此写下笔记,以记录我的成功过程!