gpt4 book ai didi

qt - QNetworkAccessManager 读取传出数据并将其保存在 QIODevice 中

转载 作者:行者123 更新时间:2023-12-04 06:30:42 36 4
gpt4 key购买 nike

我正在尝试将所有传出的 POST 数据保存在 QtWebKit 中。

我使用覆盖 来做到这一点QNetworkReply *QNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice outingData) 方法并读取包含传出 POST 数据的 OutgoingData。

问题是在读取之后,数据在 QIODevice 中变得不可用。

如何保存传出(PUT、POST)数据并使其可用于 future 的内部 Qt 操作?

如果我需要使用另一种方法来保存 PUT/POST 数据 - 请告诉我。

代码示例:

QNetworkReply *MyNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
{
QByteArray bArray = outgoingData->readAll();
// save bArray (that contains POST outgoing data) somewhere
// do other things, and outgoingData now has no data anymore, as it was already read to bArray
}

我试过了
QByteArray bArray = outgoingData->readAll();
outgoingData->write(bArray);
qDebug() << bArray;

但在这种情况下,我收到“QIODevice::write: ReadOnly device”消息。

如何在 Qt 中保存传出的 POST/PUT 数据?

谢谢。

最佳答案

qint64 QIODevice::peek (char * data, qint64 maxSize)

Reads at most maxSize bytes from the device into data, without side effects (i.e., if you call read() after peek(), you will get the same data). Returns the number of bytes read. If an error occurs, such as when attempting to peek a device opened in WriteOnly mode, this function returns -1.

0 is returned when no more data is available for reading.



编辑

忘记峰值(),在这种情况下不好。你可以使用它,但你必须做很多工作才能完成你的要求。而是阅读 Tee is for Tubes ,从那里获取代码并使用它。

链接由 peppe 提供,来自 #qt irc channel http://irc.freenode.net .
我要感谢 peppe 和 thiago,他们非常友好地与我在 #qt channel 上讨论这个问题。

如果有一天你想从 QNetworkAccessManager 窃取传入(而不是传出)数据,你会在 How to read data from QNetworkReply being used by QWebPage? 中找到答案和代码。题。

关于qt - QNetworkAccessManager 读取传出数据并将其保存在 QIODevice 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5450551/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com