如何在qtwebkit中更改POST数据?

2024-04-25 01:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

对于qtwebkit中的change POST变量,需要在createRequest(…)中更改或替换outgoingData。 如何创建自己的<PyQt4.QtCore.QIODevice object at 0x03BA...>而不是QFile或QByteArray。 正是QIODevice对象!它是创建可写设备所必需的。 或者如何将<PyQt4.QtCore.QBuffer object at 0x03BA...>转换为<PyQt4.QtCore.QIODevice object at 0x03BA...>
QNetworkAccessManager中最常用的设备:
https://qt.gitorious.org/qt/webkit/source/7647fdaf9a4b526581e02fbd0e87c41a96cbfebb:src/network/access/qnetworkaccessmanager.cpp#L941

QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
const QNetworkRequest &req,
QIODevice *outgoingData)
...

更新:调用此方法后:

^{pr2}$

脚本挂断。。。在


Tags: 对象objectqtchangepostatpyqt4qtwebkit
2条回答

如果我理解您的问题,那么QBuffer已经是(抽象的,如@mdurant)QIODevice类的实现。例如(我在PySide上尝试过,但我相信PyQt应该是一样的):

>>> from PySide.QtCore import QIODevice, QBuffer, QByteArray
>>> buff = QBuffer(QByteArray())
>>> isinstance(buff, QIODevice)
True

要创建写入QIODevice的可写QByteArray,您可以或多或少地执行以下操作:

^{pr2}$

您现在可以像写buff一样写入QIODevice,然后数据将在ba中可用。在

基本上你很接近,我想知道你为什么没有出现分段错误,每次我没有设置新数据对象的父对象时都会发生这种情况:

def createRequest(manager, operation, request, data):
    if data.size() > 0:
        data = QBuffer(QByteArray("q=hello"))
        # data was originally a ReadOnly device as well, keep it that way
        data.open(QIODevice.ReadOnly)

    reply = QNetworkAccessManager.createRequest(manager, operation, request, data)
    # must explicitly set the parent of the newly created data object to this reply object. 
    data.setParent(reply)

    return reply

我在这里写过这个问题:https://github.com/integricho/path-of-a-pyqter/tree/master/qttut07

相关问题 更多 >