HttpURLConnection de Android y URL con caracteres especiales
Considere este código siguiente (que recupera la respuesta de una solicitud HTTP y la imprime). NOTA: Este código funciona en una aplicación Java estándar. Sólo experimento el problema que aparece a continuación al usar el código en una aplicación de Android.
public class RetrieveHTMLTest { public static void main(String [] args) { getListing(args[0); } public static void getListing(String stringURL) { HttpURLConnection conn = null; String html = ""; String line = null; BufferedReader reader = null; URL url = null; try { url = new URL(stringURL); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6000); conn.setReadTimeout(6000); conn.setRequestMethod("GET"); reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); conn.connect(); while ((line = reader.readLine()) != null) { html = html + line; } System.out.println(html); reader.close(); conn.disconnect(); } catch (Exception ex) { ex.printStackTrace(); } finally { } } }
Si proporciono la URL: http: // somehost / somepath /
- Cómo obtener URL de enlace en Android WebView con HitTestResult para una imagen vinculada (y no la URL de imagen) con Longclick
- Descarga de archivos en Android
- Android enlace activo de url en TextView
- Cómo obtener el url de la página actual desde la vista web en android
- ANDROID: ¿Cómo puedo descargar un archivo de vídeo a una tarjeta SD?
El código siguiente funciona correctamente. Pero, si cambio la URL a: http: // somehost / somepath [un comentario] / El código lanza una excepción de tiempo de espera debido a los caracteres "[" y "]".
Si cambio la URL a: http: // somehost / somepath% 20% 5Ba% 20comment% 5D / El código funciona bien. Una vez más, porque los caracteres "[" y "]" no están presentes.
Mi pregunta es, ¿cómo obtengo la URL:
Http: // somehost / somepath [un comentario] /
En el siguiente formato:
Http: // somehost / somepath% 20% 5Ba% 20comment% 5D /
Además, ¿debo continuar usando HttpURLConnection en Android ya que no puede aceptar una URL con caracteres especiales? Si el estándar para convertir siempre la URL antes de usar HttpURLConnection?
- ¿Cómo puedo obtener una vista previa de una página URL en Android?
- ¿Cómo hago una solicitud http usando cookies en Android?
- SocketException: ¿Permiso denegado?
- Al hacer clic en URL, se abre el navegador predeterminado
- No puede abrir la URL de twitter en la vista web de android
- Descargar un archivo sin extensión desde un servidor
- Cómo enviar una cadena que contiene% símbolo a webservice usando HttpPost en android?
- Picasso no funciona si url contiene espacio
Utilice la clase URLEncoder
:
URLEncoder.encode(value, "utf-8");
Puede encontrar más detalles aquí .
Editar: Sólo debe utilizar este método para codificar los valores de los parámetros. NO codifique la URL completa. Por ejemplo, si usted tiene una url como: http://www.somesite.com?param1=value1¶m2=value2 entonces sólo debe codificar value1 y value2 y luego formar la url usando versiones codificadas de estos valores.
url = URLEncoder.encode(value, "utf-8"); url = url.replaceAll("\\+", "%20");
El "+" no puede ser revertido
- Cómo llamar a Button.performClick en Android JUnit test case?
- WebView en un fragmento (android.support.v4)