envirosolutionspl / pobieracz_danych_gugik

Wtyczka QGIS do pobierania danych przestrzennych z zasobów GUGiK
GNU General Public License v3.0
5 stars 1 forks source link

Błędy z lxml i SSL ciągle występują #54

Closed maciek252 closed 1 year ago

maciek252 commented 1 year ago

Dzień dobry,

Wtyczka w wersji 1.0.5 nie działa mi na QGIS 3.30 instalowanym zarówno przez flatpaka jak i bezpośrednio w systemie Ubuntu 23.04. Występuje problem z brakiem zależności lxml, mimo że jest zainstalowane (flatpak i system). Gdy zakomentuję importy lxml (jak doradzono w innym wątku https://github.com/envirosolutionspl/pobieracz_danych_gugik/issues/47 ), pojawia się problem z SSL, chyba ten sam co tutaj:

https://github.com/envirosolutionspl/pobieracz_danych_gugik/issues/49

2023-04-04T17:29:13 WARNING Traceback (most recent call last): File "/app/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/app/lib/python3.10/site-packages/urllib3/connectionpool.py", line 386, in _make_request self._validate_conn(conn) File "/app/lib/python3.10/site-packages/urllib3/connectionpool.py", line 1042, in _validate_conn conn.connect() File "/app/lib/python3.10/site-packages/urllib3/connection.py", line 414, in connect self.sock = ssl_wrapsocket( File "/app/lib/python3.10/site-packages/urllib3/util/ssl.py", line 449, in ssl_wrap_socket ssl_sock = _ssl_wrap_socketimpl( File "/app/lib/python3.10/site-packages/urllib3/util/ssl.py", line 493, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) File "/usr/lib/python3.10/ssl.py", line 513, in wrap_socket return self.sslsocket_class._create( File "/usr/lib/python3.10/ssl.py", line 1071, in _create self.do_handshake() File "/usr/lib/python3.10/ssl.py", line 1342, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:997)

         During handling of the above exception, another exception occurred:

         Traceback (most recent call last):
          File "/app/lib/python3.10/site-packages/requests/adapters.py", line 489, in send
          resp = conn.urlopen(
          File "/app/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen
          retries = retries.increment(
          File "/app/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment
          raise MaxRetryError(_pool, url, error or ResponseError(cause))
         urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='uldk.gugik.gov.pl', port=443): Max retries exceeded with url: /service.php?obiekt=wojewodztwo&wynik=wojewodztwo,teryt (Caused by SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:997)')))

         During handling of the above exception, another exception occurred:

         Traceback (most recent call last):
          File "/home/maciek/.var/app/org.qgis.qgis/data/QGIS/QGIS3/profiles/default/python/plugins/pobieracz_danych_gugik/pobieracz_danych_gugik.py", line 172, in run
          self.dockwidget = PobieraczDanychDockWidget()
          File "/home/maciek/.var/app/org.qgis.qgis/data/QGIS/QGIS3/profiles/default/python/plugins/pobieracz_danych_gugik/dialogs.py", line 57, in __init__
          self.regionFetch = RegionFetch()
          File "/home/maciek/.var/app/org.qgis.qgis/data/QGIS/QGIS3/profiles/default/python/plugins/pobieracz_danych_gugik/uldk.py", line 4, in __init__
          self.wojewodztwoDict = self.__fetchWojewodztwoDict()
          File "/home/maciek/.var/app/org.qgis.qgis/data/QGIS/QGIS3/profiles/default/python/plugins/pobieracz_danych_gugik/uldk.py", line 37, in __fetchWojewodztwoDict
          resp = requests.get('https://uldk.gugik.gov.pl/service.php?obiekt=wojewodztwo&wynik=wojewodztwo,teryt', verify=False)
          File "/app/lib/python3.10/site-packages/requests/api.py", line 73, in get
          return request("get", url, params=params, **kwargs)
          File "/app/lib/python3.10/site-packages/requests/api.py", line 59, in request
          return session.request(method=method, url=url, **kwargs)
          File "/app/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
          resp = self.send(prep, **send_kwargs)
          File "/app/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
          r = adapter.send(request, **kwargs)
          File "/app/lib/python3.10/site-packages/requests/adapters.py", line 563, in send
          raise SSLError(e, request=request)
         requests.exceptions.SSLError: HTTPSConnectionPool(host='uldk.gugik.gov.pl', port=443): Max retries exceeded with url: /service.php?obiekt=wojewodztwo&wynik=wojewodztwo,teryt (Caused by SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:997)')))
maciek252 commented 1 year ago

Sprawdziłem wersje pythona używaną przez najnowsze QGIS:

-windows (tu działa): 3.9.5 -linux flatpak: 3.11.2 -linux system: 3.10.6

Może tu jest problem?

maciek252 commented 1 year ago

Problem z SSL jest (tak mi się wydaje) opisany tu:

https://stackoverflow.com/questions/71603314/ssl-error-unsafe-legacy-renegotiation-disabled

Naprawę utrudnia fakt, że wtyczka nie implementuje warstwy pośredniej (adaptera), a wywołuje bibliotekę requests bezpośrednio:

def __fetchWojewodztwoDict(self): resp = requests.get('https://uldk.gugik.gov.pl/service.php?obiekt=wojewodztwo&wynik=wojewodztwo,teryt', verify=False)

Nie bardzo da się wprost zrobić co proponują (przedefiniować adapter).

maciek252 commented 1 year ago

Naprawiłem problem z OpenSSL, na linuksie pobieranie plików działa. Stworzyłem pull request:

https://github.com/envirosolutionspl/pobieracz_danych_gugik/pull/55