GET по электронной почте не удается при поиске электронной почты с "+" - PullRequest
0 голосов
/ 29 мая 2018

У меня есть приложение, которое хранит информацию о человеке в базе данных, но когда я пытаюсь использовать URL-адрес для GET, пользователь не может найти пользователя на основе его адреса электронной почты с + в их электронной почте.

Пример URL-адреса, который возвращает человека:

https://www.someURL.com/api/people/johnsmith@someemail.com

Пример URL-адреса, который не возвращает человека (возвращает ноль):

https://www.someURL.com/api/people/jane+doe@someemail.com

Оба письманаходятся в базе данных, как написано в URL, так что это не является проблемой опечатки, и я использую почтальон для проверки метода GET.Почему я не могу их найти, и как мне сделать так, чтобы их можно было найти даже с символом +?

Запрос рабочего почтальона

НЕ запрос рабочего почтальона

Когда я ищу с помощью идентификатора, я могу найти человека, поэтому я знаю, что этот человек существует.

Подтверждение, что человек существует

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

'+' является зарезервированным символом в URI, поэтому для предотвращения его интерпретации в качестве пробела вам необходимо процентов кодировать его.В вашем примере замените '+' на '% 2B'.

https://www.someURL.com/api/people/jane%2Bdoe@someemail.com

Существуют другие символы, которые разрешены в адресах электронной почты , но являются зарезервированными символами в URI, поэтому это будетНа всякий случай лучше всего закодировать в процентах весь адрес электронной почты.

0 голосов
/ 30 мая 2018

Мое предложение будет таким: измените реализацию вашего сервера с GET на POST и укажите адрес электронной почты в качестве параметра String в теле запроса.Это предотвратит эту и любую подобную проблему с экранированием специальных символов в URI.

Если это невозможно, попробуйте создать адрес электронной почты с одним ' или двойным " кавычки, в зависимости от того, как ваш веб-сервер обрабатывает входящий запрос, он также может помочь.

Приятно осознавать, что знак "+" на самом деле не является действительным символом для многих поставщиков электронной почты по какой-то причине.Например, Gmail не позволит вам создать адрес электронной почты с чем-либо, кроме [A-z0-9] (буквенно-цифровых) и точечных (.) символов. Я почти уверен, что они устали проверять входящие электронные письма со сложным регулярным выражением и простоограничены базовыми.

...