Qt 到 PHP post 的请求被截断为 1024 个字符 - 为什么?
Qt to PHP post request truncated at 1024 characters - why?
我发送了一个 Qt JSON string > 1024 charaters 到 PHP(通过多部分和 url 编码测试了两者)。
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"swiftjson\""));
textPart.setBody(QJsonDocument(model.toJson()).toJson(QJsonDocument::Compact));
multiPart->append(textPart);
在 PHP 端,由于某种原因,JSON 字符串被截断为 1024 个字符
我测试过:
- 客户端字符串正常,超过1024个字符
- 我使用了
QUrlQuery
而不是多部分,同样的情况
- PHP:
post_max_size 20M
正在寻找如何发送 > 1024 个字符的提示
您可能必须使用带有某种循环的 waitForBytesWritten
,或使用相关信号:bytesWritten
.
http://doc.qt.io/qt-5/qabstractsocket.html#waitForBytesWritten
http://doc.qt.io/qt-5/qiodevice.html#bytesWritten
环回示例展示了如何在响应中正确发送大负载。
http://doc.qt.io/qt-5/qtnetwork-loopback-dialog-cpp.html
static const int PayloadSize = 64 * 1024; // 64 KB
static const int TotalBytes = 50 * 1024 * 1024;
connect(&tcpClient, SIGNAL(bytesWritten(qint64)),
this, SLOT(updateClientProgress(qint64)));
// called when the TCP client connected to the loopback server
bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));
...
void Dialog::updateClientProgress(qint64 numBytes)
{
// callen when the TCP client has written some bytes
// ...
// only write more if not finished and when the Qt write buffer is below a certain size.
if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4*PayloadSize)
bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));
// ...
}
希望对您有所帮助。
我想通了。它实际上是调试器截断了变量,或者更准确地说是显示被截断了。实际值未受影响,但我被显示误导了。将调试器的值设置为 2048 可解决问题。
实际上括号中的值(上图)是实际大小,我以为是字节大小。一旦你知道...
感谢所有帮助过的人。
我发送了一个 Qt JSON string > 1024 charaters 到 PHP(通过多部分和 url 编码测试了两者)。
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"swiftjson\""));
textPart.setBody(QJsonDocument(model.toJson()).toJson(QJsonDocument::Compact));
multiPart->append(textPart);
在 PHP 端,由于某种原因,JSON 字符串被截断为 1024 个字符
我测试过:
- 客户端字符串正常,超过1024个字符
- 我使用了
QUrlQuery
而不是多部分,同样的情况 - PHP:
post_max_size 20M
正在寻找如何发送 > 1024 个字符的提示
您可能必须使用带有某种循环的 waitForBytesWritten
,或使用相关信号:bytesWritten
.
http://doc.qt.io/qt-5/qabstractsocket.html#waitForBytesWritten
http://doc.qt.io/qt-5/qiodevice.html#bytesWritten
环回示例展示了如何在响应中正确发送大负载。
http://doc.qt.io/qt-5/qtnetwork-loopback-dialog-cpp.html
static const int PayloadSize = 64 * 1024; // 64 KB
static const int TotalBytes = 50 * 1024 * 1024;
connect(&tcpClient, SIGNAL(bytesWritten(qint64)),
this, SLOT(updateClientProgress(qint64)));
// called when the TCP client connected to the loopback server
bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));
...
void Dialog::updateClientProgress(qint64 numBytes)
{
// callen when the TCP client has written some bytes
// ...
// only write more if not finished and when the Qt write buffer is below a certain size.
if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4*PayloadSize)
bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));
// ...
}
希望对您有所帮助。
我想通了。它实际上是调试器截断了变量,或者更准确地说是显示被截断了。实际值未受影响,但我被显示误导了。将调试器的值设置为 2048 可解决问题。
实际上括号中的值(上图)是实际大小,我以为是字节大小。一旦你知道...
感谢所有帮助过的人。