def testFetchEmptyUrl(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.downloadFinished) err = request.get(QNetworkRequest(QUrl())) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.ServerExceptionError) self.assertEqual(request.errorMessage(), 'Protocol "" is unknown') reply = request.reply() self.assertFalse(reply.content())
def testFetchBadUrl(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.downloadFinished) err = request.get(QNetworkRequest(QUrl('http://x'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.ServerExceptionError) self.assertEqual(request.errorMessage(), 'Host x not found') reply = request.reply() self.assertFalse(reply.content())
def testFetchBadUrl2(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.downloadFinished) err = request.get(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/ffff'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.ServerExceptionError) self.assertIn('File not found', request.errorMessage()) reply = request.reply() self.assertEqual(reply.error(), QNetworkReply.ContentNotFoundError) self.assertFalse(reply.content())
def testHead(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.finished) handler = mockedwebserver.SequentialHandler() handler.add('HEAD', '/test.html', 200, {'Content-type': 'text/html'}) with mockedwebserver.install_http_handler(handler): err = request.head(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/test.html')), True) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.NoError) self.assertEqual(request.errorMessage(), '')
def testDelete(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.finished) handler = mockedwebserver.SequentialHandler() handler.add('DELETE', '/test.html', 200) with mockedwebserver.install_http_handler(handler): err = request.deleteResource(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/test.html'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.NoError) self.assertEqual(request.errorMessage(), '')
def testPost(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.finished) handler = mockedwebserver.SequentialHandler() handler.add('POST', '/test.html', 200, expected_body=b"foo") with mockedwebserver.install_http_handler(handler): req = QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/test.html')) req.setHeader(QNetworkRequest.ContentTypeHeader, 'text/plain') err = request.post(req, b"foo") self.assertEqual(err, QgsBlockingNetworkRequest.NoError) self.assertEqual(request.errorMessage(), '')
def testFetchBadUrl2(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.downloadFinished) handler = mockedwebserver.SequentialHandler() handler.add('GET', '/ffff', 404) with mockedwebserver.install_http_handler(handler): err = request.get(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/ffff'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.ServerExceptionError) self.assertIn('Not Found', request.errorMessage()) reply = request.reply() self.assertEqual(reply.error(), QNetworkReply.ContentNotFoundError) self.assertFalse(reply.content())
def testFetchBadUrl2(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.finished) handler = mockedwebserver.SequentialHandler() handler.add('GET', '/ffff', 404, {}, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\n <title>Error response</title>\n </head>\n <body>\n <h1>Error response</h1>\n <p>Error code: 404</p>\n <p>Message: File not found.</p>\n <p>Error code explanation: HTTPStatus.NOT_FOUND - Nothing matches the given URI.</p>\n </body>\n</html>\n') with mockedwebserver.install_http_handler(handler): err = request.get(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/ffff'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.ServerExceptionError) self.assertIn('Not Found', request.errorMessage()) reply = request.reply() self.assertEqual(reply.error(), QNetworkReply.ContentNotFoundError) self.assertEqual(reply.content(), '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\n <title>Error response</title>\n </head>\n <body>\n <h1>Error response</h1>\n <p>Error code: 404</p>\n <p>Message: File not found.</p>\n <p>Error code explanation: HTTPStatus.NOT_FOUND - Nothing matches the given URI.</p>\n </body>\n</html>\n')
def _get_json_results(path, feedback): req = QgsBlockingNetworkRequest() req_status = req.get( QNetworkRequest(QUrl(urljoin(_TAXREF_API_BASE_URL, path)))) if req_status != QgsBlockingNetworkRequest.NoError: for error_name in ('NetworkError', 'TimeoutError', 'ServerExceptionError'): if req_status == getattr(QgsBlockingNetworkRequest, error_name): feedback.reportError('{}: {}'.format(error_name, req.errorMessage())) break return None content = bytes(req.reply().content()) if not content: feedback.reportError('Error while downloading data from {}.'.format( urljoin(_TAXREF_API_BASE_URL, path))) return None return json.loads(content)['_embedded']
def SearchPTH(queryString, language): request = QNetworkRequest() request.setUrl(QUrl("https://paikkatietojentuottajat-koekaytto.maanmittauslaitos.fi/api/public/v1/search?X-CLIENT-LANG=FI")) request.setHeader(request.ContentTypeHeader, "application/json") jsonByteArray = QJsonDocument(createJson(queryString, language)).toJson() blockingNetworkRequest = QgsBlockingNetworkRequest() err = blockingNetworkRequest.post(request, jsonByteArray, True) if not err: response = blockingNetworkRequest.reply().content() dict_str = response.data().decode("utf-8") if dict_str: resp_json = json.loads(dict_str) return resp_json.get("hits") else: #No result returned LOG("Nothing returned") pass else: LOG(blockingNetworkRequest.errorMessage())
def testGet(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.downloadFinished) err = request.get(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/qgis_local_server/index.html'))) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.NoError) self.assertEqual(request.errorMessage(), '') reply = request.reply() self.assertEqual(reply.error(), QNetworkReply.NoError) self.assertEqual(reply.content(), '<!DOCTYPE html>\n<html lang="en">\n<head>\n\t<meta charset="utf-8" />\n\t<title>Local QGIS Server Default Index</title>\n</head>\n<body>\n <h2 style="font-family:Arial;">Web Server Working<h2/>\n</body>\n</html>\n') self.assertEqual(reply.rawHeaderList(), [b'Server', b'Date', b'Content-type', b'Content-Length', b'Last-Modified']) self.assertEqual(reply.rawHeader(b'Content-type'), 'text/html') self.assertEqual(reply.rawHeader(b'xxxxxxxxx'), '') self.assertEqual(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), 200) self.assertEqual(reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute), 'OK') self.assertEqual(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), 200) self.assertEqual(reply.attribute(QNetworkRequest.RedirectionTargetAttribute), None)
def testGet(self): request = QgsBlockingNetworkRequest() spy = QSignalSpy(request.finished) handler = mockedwebserver.SequentialHandler() handler.add('GET', '/test.html', 200, {'Content-type': 'text/html'}, '<html></html>\n') with mockedwebserver.install_http_handler(handler): err = request.get(QNetworkRequest(QUrl('http://localhost:' + str(TestQgsBlockingNetworkRequest.port) + '/test.html')), True) self.assertEqual(len(spy), 1) self.assertEqual(err, QgsBlockingNetworkRequest.NoError) self.assertEqual(request.errorMessage(), '') reply = request.reply() self.assertEqual(reply.error(), QNetworkReply.NoError) self.assertEqual(reply.content(), '<html></html>\n') self.assertEqual(reply.rawHeaderList(), [b'Server', b'Date', b'Content-type', b'Content-Length']) self.assertEqual(reply.rawHeader(b'Content-type'), 'text/html') self.assertEqual(reply.rawHeader(b'xxxxxxxxx'), '') self.assertEqual(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), 200) self.assertEqual(reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute), 'OK') self.assertEqual(reply.attribute(QNetworkRequest.RedirectionTargetAttribute), None)
def downloadCapabilities(self, wmsUrl): """Download a remote capabilities file.""" # we get the WMS 1.1.1 XML because OWSLib actually works with it capabilitiesUrl = f"{wmsUrl}?request=GetCapabilities&version=1.1.1" request = QNetworkRequest(QUrl(capabilitiesUrl)) # suppress errors from SSL for the capabilities request (NTG network is dodgy) sslConfig = request.sslConfiguration() sslConfig.setPeerVerifyMode(QSslSocket.VerifyNone) request.setSslConfiguration(sslConfig) # use a blocking request here blockingRequest = QgsBlockingNetworkRequest() result = blockingRequest.get(request) if result == QgsBlockingNetworkRequest.NoError: reply = blockingRequest.reply() if reply.error() == QNetworkReply.NoError: xml = bytes(reply.content()).decode() self.capabilitiesDownloaded.emit(xml) else: connectionError(reply.errorString()) else: connectionError(blockingRequest.errorMessage())