docs: def validate_url(url):
      """Validate URL is valid
  
      NOTE: only support http & https
      """
      schemes = ['http', 'https']
      netloc_re = re.compile(
          r'^'
          r'(?:\S+(?::\S*)?@)?'  # user:pass auth
          r'(?:[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])'
          r'(?:\.(?:[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9]))*'  # host
          r'(?::[0-9]{2,5})?'  # port
          r'$', re.IGNORECASE
      )
  
      try:
          scheme, netloc, path, query, fragment = urlsplit(url)
      except ValueError:
          raise Invalid('Invalid URL')
  
      if scheme not in schemes:
          raise Invalid('Missing URL scheme')
  
      if not netloc_re.search(netloc):
          raise Invalid('Invalid URL')
  
      return url