2016-03-08 3 views
1

Я повторно использую устаревшую систему в качестве приложения Flask и должен хранить шаблоны url как есть. Один из URL-адресов включает в себя полный адрес электронной почты пользователя (другими словами, адрес электронной почты является частью URL-адреса, а не как параметр GET).Флажок перенаправляет запросы на URL-адреса, содержащие «@»

Когда я отправляю запросы на этот URL-адрес, Flask автоматически отвечает перенаправлением на тот же URL-адрес, за исключением того, что знак «@» на электронном адресе заменяется на «% 40». Например, запрос на /users/new/[email protected]/ перенаправляется на /users/new/user%40example.com/. Я даже получаю этот ответ от Flask, когда я отправляю POST-запросы непосредственно ко второму URL-адресу, поэтому я предполагаю, что «% 40» автоматически преобразуется в символ «@» при обработке запроса.

Как мне получить флажок, чтобы принимать запросы к URL-адресам, которые включают знак «@» без перенаправления? Это может быть ошибкой Werkzeug, поскольку система определения URL-адресов Flask построена на Werkzeug.

РЕДАКТИРОВАТЬ: Я неверно включил конечную косую черту в исходном URL запроса, указанном в этом вопросе. Моя проблема была вызвана отсутствием косой черты, а не заменой «@» на «% 40».

+0

Можете ли вы обновить свой URL-адрес POST, чтобы он использовал '% 40' вместо буквенного' @ 'и избегали кругового путешествия? Или что вам нужно, это хороший URL-адрес в адресной строке? Литературный '@' [является законным] (http://stackoverflow.com/a/19737890/223424), но все еще как-то странно внутри части домена/пути URL-адреса; возможно, Flask перереагирует, когда он его заменяет. – 9000

+0

Я попытался отправить POST на URL с заменой «@» на «% 40», как указано выше, но Flask все еще видит запрос, как если бы он был отправлен с знаком «@». Я согласен, что странно иметь адрес электронной почты как часть пути URL-адреса, но у меня нет полномочий изменять это (многие клиенты уже используют эту конечную точку, поэтому это изменение может нарушить обратную совместимость). – Adam

ответ

0

Получается, что 9000 был прав: знак «@» является совершенно законным символом в URL-адресе. Как таковая, это не должно быть то, о чем Флакс жаловался. Гораздо менее очевидно, чем преобразование «@» в «% 40» в перенаправленном URL-адресе заключается в том, что в первоначальном запросе отсутствует конечная косая черта. Когда я писал свой вопрос, я был настолько сосредоточен на изменении от «@» до «% 40» (что, как выясняется, то же самое в терминах URL), что я не заметил недостающую конечную косую черту в конце от первого URL-адреса и ошибочно включил его при написании этого вопроса.

Добавление конечной косой черты к URL-адресу POST, независимо от того, содержит ли этот URL-адрес «@» или «% 40», проблему. Если флажок заменяет «@» на «% 40» при перенаправлении, это не о чем беспокоиться. Реальная проблема, скорее всего, вызвана чем-то другим.