php - 通过 Qt 发送 POST 缩小帖子内容

标签 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 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-datatext/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/

相关文章:

php - 重命名 Woocommerce 单个产品页面中的描述选项卡

php - 转换为 Codeigniter 查询

c++ - 派生 basic_ostream : "using" keyword and ambiguous overload for operator <<

c++ - boost::asio::async_read_until 与自定义匹配条件运算符重载混淆

c++ - 计算大 O 符号

c++ - Qt/QML : How to activate a Shortcut from C++?

c++ - 在 Qt 中关闭程序之前显示一个对话框

javascript - 使用ajax提交表单后无法显示消息

php - 如何搜索多个字段(SQL、PHP)?

c++ - Windows 中的 Qt 共享库,不生成 .lib 文件