我必须实时通过单部分HTTP请求流式传输数据。目标设备仅在请求如下时处理数据:
POST ...
Content-Type:...
Content-Length:9999999
Connection:Keep-Alive
Cache-Control:no-cache
Authorization:...
<data>
<data>
<data>
...
在Java中,我必须使用setFixedLengthStreamingMode(9999999);
对象上的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
;所以我错过了什么,但是什么?有什么想法吗?