问:如何通过单一部分HTTP请求实时传输数据?

时间:2017-09-04 16:25:48

标签: c++ qt http qnetworkaccessmanager qnetworkrequest

我必须实时通过单部分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;所以我错过了什么,但是什么?有什么想法吗?

0 个答案:

没有答案