%20na%20senha%20para%20autentica%C3%A7%C3%A3o%20b%C3%A1sica%20HTTP%20em%20par%C3%A2metros%20de%20URL%3F.png)
Estou automatizando um site que requer autenticação básica HTTP.
As sugestões fornecidas neste link funcionam perfeitamente na maioria dos casos:
Você pode passar usuário/senha para autenticação básica HTTP em parâmetros de URL?
No entanto, alguns usuários possuem um ponto de interrogação ( ?
) na senha. Por favor, informe sobre como escapar do ponto de interrogação.
PS Estou ciente de que @
o nome de usuário pode ser escapado como %40
.
Responder1
Suponho que você deve estar se referindo aoinformação de usuárioparte da URL na qual as credenciais do usuário são passadas, e não "parâmetros de URL" (que fazem parte dostring de consulta):
https://<userinfo>@example.com/foo?<query-string>
Tal como acontece com qualquer caractere que não é permitido em qualquer parte do URL (porque pode ter um significado especial), ele deve ser codificado em URL (codificado por porcentagem) %
seguido pelo código hexadecimal de dois dígitos para esse caractere.
Então, @
é %40
e ?
é %3F
.
Mas esses não são os únicos dois caracteres que podem precisar de codificação de URL. Você deve passar o valor por meio de uma função de codificação de URL em seu script para codificar corretamente essa parte do URL.
RFC 3986define quais caracteres são permitidos (não codificados) noinformação de usuárioparte do URL:
userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Portanto, todo o resto deve ser codificado em percentagem, incluindo :
e %
- se fizerem parte dodo utilizadorousenhapartes (para negar seu significado especial).
Também afirmado no mesmo documento:
O uso do formato "usuário:senha" no campo userinfo está obsoleto.
Conseqüentemente, o suporte do navegador tem sido irregular, indo e voltando de versões (a segurança é a principal preocupação). Acredito que as versões mais recentes do Chrome (testado v79) e do Firefox suportam credenciais de usuário no URL. Já vi comentários de que isso também funciona no Safari mais recente (?), embora não funcione há muito tempo e atualmente não funciona para mim (embora eu não esteja executando o mais recente no iOS 12.4.1 ). EO IE abandonou o suporte para nomes de usuário e senhas na URLalguns anos atrás e não parece que vai voltar.