Неверная шестнадцатеричная кодировка в строке запроса

В настоящее время я работаю над поиском DJango с несколькими параметрами запроса, так как я использую Sentry, я обнаружил, что иногда возникает проблема, когда вы ищете, например, что-то с процентами:

"100% натуральный" "100% уникальный" "50% бла бла бла"

Вступление: Unhandled Invalid hex encoding in query string.

Это отмечено в либе oauth

if INVALID_HEX_PATTERN.search(query):
        raise ValueError('Invalid hex encoding in query string.')

Текущий код поиска позволяет передавать любой query_param следующим образом:

re_path(r"^search/?$", search_system, name="search")

А внутри представления у меня есть следующее:

query = request.query_params.get("query")
query = query.replace("%20", " ") if query else None

я пытался заменить %20 на пробел, но иногда это происходит, а иногда нет, так что это происходит случайно, я не знаю, делаю ли я что-то неправильно, или на самом деле вопрос был бы:

is there anything i could do to avoid triggering this alert without doing anything in sentry? for example like cleaning up the data like a form

Заранее спасибо.

Чтобы избежать этой проблемы, я попытался установить запрос replace("%20", " "), мое лучшее предположение заключается в том, что ошибка возникает, когда у вас есть "процент + пробел" рядом друг с другом, так что url выглядит как

search/100%25%20natural, что в python должно быть как "100% natural", но, как я уже сказал, иногда это срабатывает, а иногда нет.

Существует функция для url декодирования ваших данных. пробел не является единственным возможным кодированным символом...

from urllib.parse import unquote

query = request.query_params.get("query")
query = unquote(query) if query else None

Вернуться на верх