Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
- from PyQt5.QtCore import QUrl, QEventLoop
- from urllib.parse import urlencode
- class SyncRequester:
- def __init__(self, networkManager=None):
- self.networkManager = networkManager or QNetworkAccessManager()
- def get(self, url, params=None, headers={}):
- url = QUrl(url)
- if params:
- qs = url.query() + ('&' if url.query() else '') + urlencode(params)
- url.setQuery(qs)
- request = self._getRequest(url, headers)
- reply = self.networkManager.get(request)
- self._waitReply(reply)
- return reply
- def head(self, url, headers={}):
- u = QUrl(url)
- request = self._getRequest(u, headers)
- reply = self.networkManager.head(request)
- self._waitReply(reply)
- return reply
- def post(self, url, data, headers={}):
- url = QUrl(url)
- if isinstance(data, (dict, list, tuple)):
- data = urlencode(data).encode('ascii')
- request = self._getRequest(url, headers)
- reply = self.networkManager.post(request, data)
- self._waitReply(reply)
- return reply
- def put(self, url, data, headers={}):
- url = QUrl(url)
- request = self._getRequest(url, headers)
- reply = self.networkManager.put(request, data)
- self._waitReply(reply)
- return reply
- def _getRequest(self, url, headers):
- request = QNetworkRequest(url)
- for header, value in headers.items():
- request.setRawHeader(bytes(header, 'ascii'), bytes(value, 'ascii'))
- return request
- def _waitReply(self, reply):
- loop = QEventLoop()
- reply.finished.connect(loop.quit)
- loop.exec_()
- if __name__ == '__main__':
- from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QLabel,
- QTextEdit)
- app = QApplication([])
- requester = SyncRequester()
- r = requester.get("http://httpbin.org/get", {"foo": "bar"})
- w = QWidget()
- lay = QVBoxLayout(w)
- lay.addWidget(QLabel("Response:"))
- lay.addWidget(QTextEdit("<pre>{}</pre>".format(str(r.readAll(), 'utf-8'))))
- w.show()
- app.exec_()
- del app # QWaitCondition: Destroyed while threads are still waiting?!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement