我必须通过单个 HTTP 请求实时流式传输数据。目标设备仅在请求如下时处理数据:
POST ...
Content-Type:...
Content-Length:9999999
Connection:Keep-Alive
Cache-Control:no-cache
Authorization:...
<data>
<data>
<data>
...
setFixedLengthStreamingMode(9999999);
在 Java 中,我必须做一些 hack 才能使用对象上的函数使其工作HttpURLConnection
。然后我创建请求并使用对象填充正文数据BufferedOutputStream
。
现在,我正在尝试开发一个基于 Qt 的应用程序来将数据传输到这个设备,但我无法实现它。我试过类似的东西:
QNetworkRequest networkRequest;
networkRequest.setUrl(/*...*/);
// Set some headers
networkRequest.setHeader(QNetworkRequest::ContentLengthHeader, "9999999");
QIODevice* pIoDevice = new QBuffer(this);
pIoDevice->open(QIODevice::ReadWrite);
QNetworkAccessManager* pNetworkAccessManager = new QNetworkAccessManager(this);
pNetworkAccessManager->post(networkRequest, pIoDevice);
// Then exec current run loop to wait until I manually stop it.
另一方面,当我的制作人给我传输数据时,我想做一些类似的东西:
pIoDeviceData->write(/* data */);
问题是读取网络跟踪(使用 Wireshark),我看到Content-Length
发射等于0
所以设备关闭连接,我得到一个错误代码NetworkError::RemoteHostClosedError
;所以我错过了一些东西,但是什么?任何想法?