Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改qtwebkit中的POST数据?_Python_Qt_Webkit_Pyqt4_Qiodevice - Fatal编程技术网

Python 如何更改qtwebkit中的POST数据?

Python 如何更改qtwebkit中的POST数据?,python,qt,webkit,pyqt4,qiodevice,Python,Qt,Webkit,Pyqt4,Qiodevice,要更改qtwebkit中的POST变量,需要更改或替换createRequest(…)中的outgoingData。 如何创建自己的而不是QFile或QByteArray。 正是这件事!创建可写设备时需要它。 或者如何将转换为 此设备在QNetworkAccessManager中最常用: 更新:调用此方法后: def createRequest(manager, operation, request, data): if data.size() > 0: post

要更改qtwebkit中的POST变量,需要更改或替换createRequest(…)中的outgoingData。 如何创建自己的
而不是QFile或QByteArray。 正是这件事!创建可写设备时需要它。 或者如何将
转换为

此设备在QNetworkAccessManager中最常用:

更新:调用此方法后:

def createRequest(manager, operation, request, data):
    if data.size() > 0:
        post_body = "q=hello"
        output = QtCore.QByteArray()
        buffer = QtCore.QBuffer(output)
        buffer.open(QtCore.QIODevice.ReadWrite)
        buffer.writeData(post_body)
        data = buffer

    reply = QNetworkAccessManager.createRequest(manager, operation, request, data)
    return reply

脚本挂起了…

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

要创建可写的
QIODevice
写入
QByteArray
,您可以大致执行以下操作:

ba = QByteArray()
buff = QBuffer(ba)
buff.open(QIODevice.WriteOnly)

您现在可以像写入
QIODevice
一样写入
buff
,然后数据将在
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

我在这里写到了这个问题:

正如文档将告诉您的那样,QIODevice是一个抽象类,也就是说,您应该自己对它进行子类化并实现各种方法,而不是直接实例化它。ba=QByteArray()buff=QBuffer(ba)buff.open(QIODevice.WriteOnly)打印buff打印是:
不是
对不起,我正在更新我的问题,在ba中可以,但是这个设备在
createRequest中不工作(QNetworkAccessManager::Operation op,const QNetworkRequest&req,QIODevice*outgoingData)
你说的“不工作”是什么意思?您是否收到错误消息?顺便说一句,如果您坐在Python代码示例(而不是C++/Python混合代码)上会有所帮助;另外,不需要粘贴类
\uu repr\uuu
字符串-如果您只编写
QBuffer
PyQt4.QtCore.QBuffer
而不是那些可怕的
字符串,它的可读性会更好。我再次更新我的问题!调用方法后-
createRequest(管理器、操作、请求、数据)
数据脚本中的QBuffer挂起。。。
ba = QByteArray()
buff = QBuffer(ba)
buff.open(QIODevice.WriteOnly)
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