Qt多部分帖子问题

时间:2011-06-21 09:45:14

标签: qt http multipart qnetworkaccessmanager

我需要帮助发送多部分帖子请求。主要问题是服务器无法识别我的请求的帖子正文部分。服务器端可以正常使用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());

2 个答案:

答案 0 :(得分:2)

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

删除新行(\ r \ n)之前的额外空格。请将postBody.append(“\ r \ n”)更改为postBody.append(“\ r \ n”)

答案 1 :(得分:1)

从Qt 4.8开始,QHttpMultiPart类出现了这个技巧。