Я автоматизирую веб-сайт, который требует базовой HTTP-аутентификации.
эта ссылка в большинстве случаев работает как чудо:
Можно ли передать пользователя / пароль для базовой аутентификации HTTP в параметрах URL?
Однако у некоторых пользователей есть вопросительный знак (?
) в пароль.
Посоветуйте, пожалуйста, как избежать знака вопроса.
P.S.
Мне известно, что @
в имени пользователя можно экранировать как % 40
.
Я предполагаю, что вы, должно быть, имеете в виду часть userinfo URL-адреса, в которой передаются учетные данные пользователя, а не «параметры URL» (которые являются частью ] query-string ):
https://<userinfo>@example.com/foo?<query-string>
Как и любой символ, который не разрешен в какой-либо части URL-адреса (поскольку он может иметь особое значение), он должен быть закодирован в URL-адресе ( закодирован в процентах ) как %
, за которым следует двузначный шестнадцатеричный код для этого символа.
Итак, @
- это % 40
и ?
] равно % 3F
.
Но это не единственные два символа, которые могут нуждаться в кодировании URL. Вы должны передавать значение через функцию кодирования URL в своем сценарии, чтобы правильно кодировать URL этой части URL.
RFC 3986 определяет, какие символы разрешены (не закодированы) в userinfo часть URL:
userinfo = * (unreserved / pct-encoded / sub-delims / ":") unreserved = АЛЬФА / ЦИФРА / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" знак равно
Таким образом, все остальное должно быть закодировано в процентах, включая :
и %
- если они являются частью пароля пользователя или ] частей (чтобы исключить особое значение).
Также указано в том же документе:
Использование формата «пользователь: пароль» в поле информации о пользователе устарело.
Следовательно, поддержка браузерами была неоднородной. , приходящие и повторяющиеся версии (безопасность - первоочередная задача). Я считаю, что последние версии Chrome (проверено v79) и Firefox поддерживают учетные данные пользователя в URL-адресе. Я видел комментарии о том, что это также работает в последней версии Safari (?), Хотя это не работало долгое время и в настоящее время не работает для меня (хотя я не использую последнюю версию на iOS 12.4.1 ). И IE отказался от поддержки имен пользователей и паролей в URL несколько лет назад, и похоже, что это не вернется.