Qt 多部分帖子问题

Posted

技术标签:

【中文标题】Qt 多部分帖子问题【英文标题】:Qt multipart post problem 【发布时间】:2011-06-21 09:45:13 【问题描述】:

我在发送多部分发布请求方面需要帮助。主要问题是服务器无法识别我请求的帖子正文部分。服务器端在 android 上运行良好,但在 Qt 和 NetworkAccessManager 上运行良好。

代码如下:

在这里,我将 bodyPart 与请求一起发送(transferData 是一个带有一些文本的 QByteArray):

postBody.append("\r\n--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"auth\" \r\n");
postBody.append(" \r\n");
postBody.append(auth + " \r\n");
postBody.append("--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"upload-test-data\" \r\n");
postBody.append(" \r\n");
postBody.append(transferData + " \r\n");
postBody.append("--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"upload-checksum\" \r\n");
postBody.append(" \r\n");
postBody.append(checksum.toHex() + " \r\n");
postBody.append("\r\n--" + boundary + "--\r\n");

这是标题:

request.setRawHeader("User-Agent", "MyApp 1.0");
request.setRawHeader("Content-Type", "multipart/form-data; boundary="+boundary.toAscii());
request.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(postBody.size()).toAscii());

【问题讨论】:

【参考方案1】:

尝试在设置“Content-Type”后添加“Content-Length”标头。值应该类似于QString::number(postBody.length())。 (已编辑:这并没有解决问题)。

在新行 (\r\n) 起作用之前删除多余的空间。请将 postBody.append(" \r\n") 更改为 postBody.append("\r\n")

【讨论】:

感谢您的回答,但将大小更改为长度不起作用。更多建议? 让我们也尝试删除新行之前的多余空格 (\r\n)。请将 postBody.append(" \r\n") 更改为 postBody.append("\r\n") 就是这样。谢谢阿齐兹,你拯救了我的一天。将您的评论作为回复,以便我接受。【参考方案2】:

自 Qt 4.8 以来,出现了 QHttpMultiPart 类,它可以解决问题。

【讨论】:

以上是关于Qt 多部分帖子问题的主要内容,如果未能解决你的问题,请参考以下文章

Apache HttpClient 制作多部分表单帖子

WebAPI 无法解析多部分/表单数据帖子

c_cpp objective-c中多部分表单帖子的示例

Qt 和可执行 dll 的

可嵌入与一对多

使用带有多选复选框的 Ajax 帖子过滤器获取帖子