Escapar de símbolos en URL para solicitudes HttpClient
-
23-09-2019 - |
Pregunta
Tengo un código Java que usa Jakarta HttpClient como este:
URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());
El problema es que si title
incluye cualquier signo comercial (&), se consideran delimitadores de parámetros y la solicitud se vuelve loca...y si los reemplazo con el equivalente con escape de URL %26
, entonces esto obtiene un doble escape mediante getEscapedPathQuery() en %2526
.
Actualmente estoy solucionando esto básicamente reparando el daño después:
URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));
Pero hay tiene Parece una forma más agradable de hacer esto, ¿verdad?Tenga en cuenta que el título puede contener cualquier cantidad de caracteres UTF-8 impredecibles, etc., por lo que escapar de todo lo demás es un requisito.
Solución
Aquí tienes:
import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());
Controlar java.net.urlencoder para más información.
Otros consejos
¿Por qué llamas getAcapedPathQuery () si no quieres escapar? Simplemente decida quién es la responsabilidad y sea consistente.
Utilizar el Codificador de URL clase.
Clase de utilidad para codificación de formularios HTML.Esta clase contiene métodos estáticos para convertir una cadena en el formato MIME de aplicación/x-www-form-urlencoded.Para obtener más información sobre la codificación del formulario HTML, consulte la especificación HTML.