class_docstr: The fallback adapter which uses urllib from the Python standard
  library, see :func:`urllib.request.urlopen`.
  
  urllib doesn't support keep-alives, request retries,
  doesn't persist Cookies and is HTTP/1.1 only.
  
  urllib was the only available option
  for making requests in geopy 1.x, so this adapter behaves the same
  as geopy 1.x in terms of HTTP requests.
code: def get_text(self, url, *, timeout, headers):
      req = Request(url=url, headers=headers)
      try:
          page = self.urlopen(req, timeout=timeout)
      except Exception as error:
          message = (
              str(error.args[0]) if len(error.args) else str(error)
          )
          if isinstance(error, HTTPError):
              code = error.getcode()
              response_headers = {
                  name.lower(): value
                  for name, value in error.headers.items()
              }
              body = self._read_http_error_body(error)
              raise AdapterHTTPError(
                  message,
                  status_code=code,
                  headers=response_headers,
                  text=body,
              )
          elif isinstance(error, URLError):
              if "timed out" in message:
                  raise GeocoderTimedOut("Service timed out")
              elif "unreachable" in message:
                  raise GeocoderUnavailable("Service not available")
          elif isinstance(error, SocketTimeout):
              raise GeocoderTimedOut("Service timed out")
          elif isinstance(error, SSLError):
              if "timed out" in message:
                  raise GeocoderTimedOut("Service timed out")
          raise GeocoderServiceError(message)
      else:
          text = self._decode_page(page)
          status_code = page.getcode()
          if status_code >= 400:
              response_headers = {
                  name.lower(): value
                  for name, value in page.headers.items()
              }
              raise AdapterHTTPError(
                  "Non-successful status code %s" % status_code,
                  status_code=status_code,
                  headers=response_headers,
                  text=text,
              )
  
      return text
  
imports: import abc
  import asyncio
  import contextlib
  import email
  import json
  import ssl
  import time
  import warnings
  from socket import timeout
  from ssl import SSLError
  from urllib.error import HTTPError
  from urllib.parse import urlparse
  from urllib.request import HTTPSHandler, ProxyHandler, Request, URLError, build_opener, getproxies
  from geopy.exc import GeocoderParseError, GeocoderServiceError, GeocoderTimedOut, GeocoderUnavailable, GeopyError
  from geopy.util import logger
label_desc: Use image node_id 3 for calling the URLLibAdapter obj's underlying member method code with example usage: obj.get_text(url) and returns: text