Неверная шестнадцатеричная кодировка в строке запроса
В настоящее время я работаю над поиском 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