我创建了一个反馈报告器,它将一些信息发送到服务器。
这是发件人部分:
QUrl url;
url.setUrl("http://myprettyURL/server.php");
QNetworkRequest request(url);
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QByteArray content = "Some very long content (60Ko)";
manager->post(request, content);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onSyncRequestFinished(QNetworkReply*)));
这是服务器部分:
$i = 0
foreach($_POST as $post){
file_put_contents( $submission_dir . "/log" . $i , $post);
$i++;
}
发件人发送了 60Ko 的文本(很多文本,但不是大数据)但只传输了 1Ko。
Qt 抛出以下错误:
qhttpnetworkrequest.cpp static QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &, bool) @164 content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem.
所以我加入了这一行:
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
已测试 application/x-www-form-urlencoded
multipart/form-data
和 text/plain
但均无效。
post_max_size
设置为 32Mo,所以我不认为它来自这里。
有什么线索可以缩小内容吗?
最佳答案
所有这些内容类型都需要在发送之前对数据进行编码!只要您实际发送文本而不是二进制数据,text/plain
内容类型使用起来最简单。
要发送纯文本,必须将其放在QString
中,然后将其编码为utf-8
,最后将内容类型相应地设置为text/html; charset=utf-8
.
因此:
QString text(QStringLiteral("foo"));
QByteArray const data = text.toUtf8();
QNetworkRequest request(QUrl(QStringLiteral("http://myprettyURL/server.php")));
request.setHeader(QNetworkRequest::ContentTypeHeader,
QStringLiteral("text/html; charset=utf-8"));
manager->post(request, data);
关于php - 通过 Qt 发送 POST 缩小帖子内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690622/