веб-сервисы — пост-запрос Qt к PHP, усеченный до 1024 символов — почему?

Я отправил Qt JSON строка> 1024 символов в 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

Я проверил:

  1. Строка на стороне клиента в порядке и длиннее 1024 символов
  2. Я использовал QUrlQueryвместо нескольких частей, та же ситуация
  3. PHP: post_max_size 20M

Ищете подсказку, как я могу отправить> 1024 символов

3

Решение

Вы, вероятно, должны использовать 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), '@'));

// ...
}

Надеюсь, это поможет.

2

Другие решения

Я понял это. Это на самом деле отладчик, усекающий переменные, или, точнее, отображение усекается. Фактическое значение остается нетронутым, но меня обманул дисплей. Установка значения 2048 для отладчика решает проблему.

На самом деле значение в скобках (на скриншоте выше) — это реальный размер, который я считал размером в байтах. Как только вы знаете …

Спасибо всем, кто помог.

Elcipse Debugger

0

По вопросам рекламы [email protected]