API для входа в систему пользователя с (+), подписанным под своим именем пользователя, для входа - PullRequest
0 голосов
/ 01 мая 2019

В настоящее время пользователь с электронной почтой, такой как test+test@email.com, не получает доступ к API из-за знака (+).При выполнении вызова базы данных с таким идентификатором пользователя это приносит результаты.Однако при выполнении вызова API, такого как этот.

api.hq.org/user?token=1234567&username=test+test@email.com

, это не дает никаких результатов.Я пытаюсь найти способ разрешить таким пользователям возвращать результаты.Я знаю, что это кодировка URL, но мне интересно, сталкивался ли кто-нибудь с этим однажды?

Ответы [ 2 ]

1 голос
/ 01 мая 2019

+ является метасимволом в URL и преобразуется в пробел.

Если вам нужен фактический +, вам нужно его избежать, скорее всего, используя rawurlencode().

0 голосов
/ 01 мая 2019

Знак + является метасимволом в URL и преобразуется в пробел.

Это не совсем верно.

RFC 3986 стандартизирует URI и включает в приложение-A расширенную форму Бачуса-Наура описание синтаксиса URI. + (U + 002B) является членом sub-delims, что означает, что он является членом pchar и, следовательно, является кандидатом для включения в query.

Исторически более вероятно, что проблема, с которой вы сталкиваетесь, заключается в том, что некоторая часть стека предполагает, что ваш запрос равен application/x-www-form-urlencoded, что является одним из вариантов отправки данных формы в HTML. Правила для этого типа включают в себя шаг сериализации , который заменяет пробел (U + 0020) на плюс (U + 002B) и плюс на его кодированную в процентах форму.

При извлечении данных из него десериализатор, естественно, заменит плюс в URL пробелом.

Но основной эскиз правильный - если ваши сериализаторы и десериализаторы не сбалансированы правильно, вас ждет плохой день .

...