Привет, я работаю с pyqt4, и я хочу создать произвольный запрос POST, используя запрос QtWebKit моего QWebPage/QWebView. Тщательно осмотрев все вокруг, я понял, что мне нужно создать подкласс networkaccessmanager, переопределив метод createRequest()
.
Я видел пример, который позволял использовать четвертый параметр createRequest для извлечения данных отправляемого запроса POST (см. код ниже), но мой вопрос заключается в том, как я могу установить ту же переменную данных createRequest для отправки пользовательских данных POST, как "запрос = мое значение"?
По-видимому, данные - это переменная 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_()