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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top