【发布时间】:2012-10-11 23:48:42
【问题描述】:
您好,我正在使用 pyqt4,我想做的是通过使用我的 QWebPage/QWebView 的 QtWebKit 请求来制作任意 POST 请求。通过广泛研究我的理解是,我必须通过覆盖 createRequest() 方法来继承 networkaccessmanager。
我看到了一个示例,它允许使用 createRequest 的第四个参数来提取正在发送的 POST 请求(见下面的代码)的数据,但我的问题是如何设置 createRequest 的相同数据变量来发送自定义POST 数据,例如“query=myvalue”?
显然 data 是一个 QIODevice 变量:我尝试了很多不同的方法来设置它,但无法让它工作,并且总是以 python 抱怨它是一个意外的值而告终。我在这里错过了什么吗?有人愿意分享一个工作代码示例吗?
import sys
from PySide.QtCore import *
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView, QWebPage
from PySide.QtNetwork import QNetworkAccessManager
html = ''' <html> <body>
<form action="http://www.google.com" method="post"><input type="text" name="test" /><input type="submit" value="submit"/></form>
</body> </html> '''
class Browser(object):
def __init__(self):
self.network_manager = QNetworkAccessManager()
self.network_manager.createRequest = self._create_request
self.web_page = QWebPage()
self.web_page.setNetworkAccessManager(self.network_manager)
self.web_view = QWebView()
self.web_view.setPage(self.web_page)
self.html_data = None
def _create_request(self, operation, request, data):
# data contains all the post data that is being added to the request
# so you can look into it here
print data.readAll()
reply = QNetworkAccessManager.createRequest(self.network_manager,
operation,
request,
data)
return reply
if __name__ == '__main__':
app = QApplication(sys.argv)
browser = Browser()
frame = browser.web_page.mainFrame()
browser.web_view.setHtml(html)
browser.web_view.show()
app.exec_()
【问题讨论】:
-
您要发送一个全新的 POST 请求还是即时修改现有请求的参数?
-
为了了解知识,我很想知道如何动态修改现有参数的参数,因为我知道如何发送全新的请求。随意张贴在这里,我在任何地方都找不到具体的帮助,所以我相信它也会使其他人受益。干杯。
标签: python pyqt pyside qwebview qwebkit