Eu sei que você sempre pensou nas provações e tribulações de experimentar as alegrias da vida como um proxy da web. Honestamente, quem não tem? Hoje você tem a tarefa de realizar esse objetivo (pelo menos uma parte dele). O site X recebe muito tráfego diariamente e está procurando um PaaS (isso claramente se refere ao Proxy como um Serviço) devido ao grande número de usuários que insistem em passar informações confidenciais por meio de parâmetros de consulta (os usuários são tolos). Sua tarefa é remover todos e quaisquer parâmetros de consulta confidenciais da solicitação antes de encaminhar a solicitação até seu destino original.
Entrada
- Um URL HTTP absoluto bem formado que segue a gramática URI na Seção 3 do RFC3986 .
- Você pode assumir que não há fragmento
- Breve exemplo de formato, onde qualquer coisa entre colchetes denota opcional:
http[s]://[user:pass@]host.name.com[:port]/[?param1=value1¶m2=value2...]
- Uma lista de parâmetros de consulta a serem removidos.
Resultado
A URL HTTP modificada sem os parâmetros definidos na lista de entrada.
Exemplos
http://example.com/ [foo]
> http://example.com/
http://example.com/?foo=bar []
> http://example.com/?foo=bar
http://example.com/ []
> http://example.com/
http://example.com/?foo=1&bar=2&baz=3 [foo,baz]
> http://example.com/?bar=2
http://example.com/?foo=1&bar=2&baz=3 [foo,bar,baz]
> http://example.com/
http://example.com/?foo&bar=2&baz= [foo,baz]
> http://example.com/?bar=2
http://example.com/?abc=1&def=2&baz=foo [foo,bar]
> http://example.com/?abc=1&def=2&baz=foo
http://example.com/?foobar=baz [foo]
> http://example.com/?foobar=baz
http://foo:foo@foo.com:8080/?foo=1&bar=foo [foo]
> http://foo:foo@foo.com:8080/?bar=foo
Pontuação
Isso é código-golfe , então a resposta mais curta (em bytes) vence.
&aparecer em qualquer lugar que não seja entre parâmetros?
?? Também a ordem deve ser mantida como era?
&faz parte de um parâmetro de consulta, deve ser codificado corretamente como%26
http://foo:&foo=x@foo.com:8080/?foo=1&bar=fooé permitido pelo RFC. Isso deve quebrar várias soluções existentes. : D (A regra é userinfo pode ser expandido como sem reservas ou PCT-fuga ou sub-delims, e sub-delims pode ter &e =)