#include #include #include #include #include int main(int argc, char *argv[]) { // Instructions: // $ nc -l -p 12000 | tee dump.bin | xxd // Run this program // Notice the random bytes between the XXXXX and the --boundary_.oOo. at the end. // There should be 0x0d and 0x0a before --boundary_.oOo. instead of random bytes. // It appears the random bytes are from uninitialized memory. QCoreApplication a(argc, argv); QHttpMultiPart multiPart(QHttpMultiPart::FormDataType); QUrl url; url.setScheme("http"); url.setHost("192.168.1.3"); url.setPort(12000); url.setPath("/"); QNetworkRequest request(url); { QHttpPart part; part.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"field1\"; filename=\"aaaa.bin\""); part.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream"); part.setBody(QByteArray(56083, 'X')); multiPart.append(part); } { QHttpPart part; part.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"field2\"; filename=\"bbbb.txt\""); part.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); part.setBody(QByteArray(468, 'X')); multiPart.append(part); } { QHttpPart part; part.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"field3\"; filename=\"cccc.txt\""); part.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); part.setBody(QByteArray(24952, 'X')); multiPart.append(part); } QNetworkAccessManager manager; QNetworkReply *reply = manager.post(request, &multiPart); QObject::connect(reply, SIGNAL(finished()), &a, SLOT(quit())); return a.exec(); }