requests icon indicating copy to clipboard operation
requests copied to clipboard

Request not throwing requests.exceptions.InvalidSchema on custom HTTPAdapter

Open defkev opened this issue 1 year ago • 0 comments

Mounting a custom HTTPAdapter (e.g. for retry) using an unsupported protocol (e.g. typo) doesn't throw requests.exceptions.InvalidSchema like the default adapter?!

Expected Result

Should throw requests.exceptions.InvalidSchema

Actual Result

Traceback (most recent call last):
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\adapters.py", line 456, in send
    conn = self.get_connection(request.url, proxies)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\adapters.py", line 358, in get_connection
    conn = self.poolmanager.connection_from_url(url)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\urllib3\poolmanager.py", line 299, in connection_from_url
    return self.connection_from_host(
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\urllib3\poolmanager.py", line 246, in connection_from_host
    return self.connection_from_context(request_context)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\urllib3\poolmanager.py", line 258, in connection_from_context
    raise URLSchemeUnknown(scheme)
urllib3.exceptions.URLSchemeUnknown: Not supported URL scheme htxp

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\.res\git\python-iptvcat-crawler\_TEST\520.py", line 21, in <module>
    with session.get(url.geturl()) as r:
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\sessions.py", line 600, in get
    return self.request("GET", url, **kwargs)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "C:\.res\binaries\python-3.9.13-embed-amd64\lib\site-packages\requests\adapters.py", line 458, in send
    raise InvalidURL(e, request=request)
requests.exceptions.InvalidURL: Not supported URL scheme htxp

Reproduction Steps

from urllib.parse import urlparse
import requests
import urllib3

url = urlparse('htxp://example.com/test')

retries = requests.packages.urllib3.util.retry.Retry(
    status_forcelist = tuple(range(500, 600))
)
adapter = requests.adapters.HTTPAdapter(max_retries = retries)
session = requests.Session()
session.mount('%s://' % (url.scheme), adapter)

try:
    with session.get(url.geturl()) as r: # Should throw requests.exceptions.InvalidSchema
        print(r.status_code)
except requests.exceptions.InvalidSchema as e: # Not thrown!
    print(e)
except urllib3.exceptions.URLSchemeUnknown as e: # Instead this does but can't catch it?
    print(e)
except requests.exceptions.InvalidURL as e: # Thrown by above exception
    print(e)

System Information

$ python -m requests.help
{
  "requests": {
    "version": "2.28.1"
  },
  "urllib3": {
    "version": "1.26.13"
  }
}

defkev avatar May 19 '24 02:05 defkev