Better exception for bad URL parse (#2415)

This commit is contained in:
Adam Hopkins
2022-03-25 00:22:12 +02:00
committed by GitHub
parent 030987480c
commit 0cb342aef4
3 changed files with 25 additions and 3 deletions

View File

@@ -51,6 +51,10 @@ class InvalidUsage(SanicException):
quiet = True
class BadURL(InvalidUsage):
...
class MethodNotSupported(SanicException):
"""
**Status**: 405 Method Not Allowed

View File

@@ -30,10 +30,11 @@ from types import SimpleNamespace
from urllib.parse import parse_qs, parse_qsl, unquote, urlunparse
from httptools import parse_url # type: ignore
from httptools.parser.errors import HttpParserInvalidURLError # type: ignore
from sanic.compat import CancelledErrors, Header
from sanic.constants import DEFAULT_HTTP_CONTENT_TYPE
from sanic.exceptions import InvalidUsage, ServerError
from sanic.exceptions import BadURL, InvalidUsage, ServerError
from sanic.headers import (
AcceptContainer,
Options,
@@ -129,8 +130,10 @@ class Request:
):
self.raw_url = url_bytes
# TODO: Content-Encoding detection
self._parsed_url = parse_url(url_bytes)
try:
self._parsed_url = parse_url(url_bytes)
except HttpParserInvalidURLError:
raise BadURL(f"Bad URL: {url_bytes.decode()}")
self._id: Optional[Union[uuid.UUID, str, int]] = None
self._name: Optional[str] = None
self.app = app