如何更改 qtwebkit 中的 POST 数据? [英] How to change POST data in qtwebkit?

查看:66
本文介绍了如何更改 qtwebkit 中的 POST 数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要更改qtwebkit 中的POST 变量,需要更改或替换createRequest(...) 中的outgoingData.如何创建自己的 而不是 QFile 或 QByteArray.正是 QIODevice 对象!创建可写设备需要它.或者如何将 转换为 .
这个设备最常用于 QNetworkAccessManager:
https://orgt.gitorious/qt/webkit/source/7647fdaf9a4b526581e02fbd0e87c41a96cbfebb:src/network/access/qnetworkaccessmanager.cpp#L941

For change POST variables in qtwebkit need change or replace outgoingData in createRequest(...). How to create own <PyQt4.QtCore.QIODevice object at 0x03BA...> not QFile or QByteArray. Exactly QIODevice object! It is needed for creation of writable device. Or how to convert <PyQt4.QtCore.QBuffer object at 0x03BA...> to <PyQt4.QtCore.QIODevice object at 0x03BA...>.
This device most used in 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)
...

更新:调用此方法后:

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

脚本挂断...

推荐答案

基本上你已经接近了,我想知道你为什么没有得到segmentation fault,我每次没有设置父对象时都会出现这种情况新的数据对象:

Basically you were close, I wonder why you didn't get a segmentation fault, it happened to me every time when I didn't set the parent object of the new data object:

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

I wrote about this exact issue here: https://github.com/integricho/path-of-a-pyqter/tree/master/qttut07

这篇关于如何更改 qtwebkit 中的 POST 数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆