嗨,我正在使用 pyqt4,我想做的是通过使用我的 QWebPage/QWebView 的 QtWebKit 请求来制作任意 POST 请求。通过广泛地查看我的理解是,我必须通过覆盖该createRequest()
方法来继承 networkaccessmanager。
我看到了一个示例,它允许使用 createRequest 的第四个参数来提取正在发送的 POST 请求的数据(请参见下面的代码),但我的问题是如何设置 createRequest 的相同数据变量来发送自定义 POST 数据,像“查询=我的价值”?
显然 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_()