Problema de codificación de URL de apache httpget (más signo, +)
-
26-10-2019 - |
Pregunta
Estoy enviando una solicitud Get con httpclient pero el +
no está codificado.
1. Si paso el query
Cadena de parámetros sin codificación como esta
URI uri = new URI(scheme, host, path, query, null);
HttpGet get = new HttpGet(uri);
Entonces el +
El signo no está codificado y se recibe como espacio en el servidor. El resto de la URL está codificada bien.
2.Si codifico los parámetros en el query
cadena como esta
param = URLEncoder.encode(param,"UTF-8");
Luego obtengo un montón de símbolos extraños en el servidor, probablemente porque la URL se ha codificado dos veces.
3. Si solo reemplazo el +
con %B2
como esto
query = query.replaceAll("\\+","%B2");
Después %B2
está codificado cuando el Get es ejecutado por HttpClient
¿Cómo puedo codificar correctamente los parámetros GET con Apache httpClient y asegurarme de que el +
¿Está codificado también?
Solución
Ok, la solución era que en lugar de crear el URI como este
URI uri = new URI(scheme, host, path, query, null);
Uno debería crearlo así
URIUtils.createURI(scheme, host, -1, path, query, null);
El propósito de la clase Uriutils es
Una colección de servicios públicos para URI, a errores de solución dentro de la clase
sin comentarios........
Otros consejos
Cuando construyes el query
cadena, usa URLEncoder.encode(paramValue, "UTF-8")
Para cada valor de parámetro. Luego, cuando envíe la solicitud, use URLDecoder.decode(paramValue, "UTF-8")
y los "símbolos extraños" serán decodificados.