通过Qt发送POST收缩帖子内容

时间:2014-03-27 14:28:48

标签: php c++ qt post

我创建了一个反馈记者,它将一些信息发送给服务器。

这是发件人部分:

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内容类型在HTTP POST中丢失,默认为application / x-www-form-urlencoded。使用QNetworkRequest :: setHeader()来解决此问题。

  

所以我加入了这一行:

request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");

已经过测试application/x-www-form-urlencoded multipart/form-datatext/plain但没有效果。

post_max_size设置为32Mo所以我不认为它来自这里。

任何可能缩小内容的线索?

2 个答案:

答案 0 :(得分:1)

所有这些内容类型都要求在发送数据之前对数据进行编码! 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);

答案 1 :(得分:0)

问题来自发送的数据:我发送的字符被解释为=&等查询。

我只是使用以下方法将其从字符串中删除:

content.remove("[=|&]");

并且运作良好。