PDA

Ver la Versión Completa : Error descarga HTML


Kete_
31/03/13, 18:20:06
Buenas,

Estoy intentando obtener el código de la siguiente web http://www.livescore.com/soccer/spain/, y me estoy encontrando que mientras que en versiones 2.3 y superiores, se descarga el código correctamente, en la versión 2.2 hay veces que se descarga bien el código y veces que descarga basura.

He probado dos funciones para descargar el código, pero me ocurre lo mismo de las dos formas, ¿alguno tiene idea de que puede pasar?

Os pongo los dos códigos:

Codigo 1:


private String getHtml() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.livescore.com/soccer/spain/");
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";

BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);

String line = null;
while ((line = reader.readLine()) != null){
result += line + "\n";
}

return result;
}

Codigo 2:


private String getHtml() throws Exception
{
String aux="";
String nextLine;
URL url = null;
URLConnection urlConn = null;
InputStreamReader inStream = null;
BufferedReader buff = null;
url = new URL("http://www.livescore.com/soccer/spain/");
urlConn = url.openConnection();
//Set timeouts
urlConn.setConnectTimeout(45000);
urlConn.setReadTimeout(45000);
inStream = new InputStreamReader(urlConn.getInputStream(),encodin g);
buff= new BufferedReader(inStream);
// Read and print the lines from index.html
while (true)
{
nextLine =buff.readLine();
if (nextLine !=null)
{
aux=aux+nextLine;
}
else{break;}
}
return aux;
}

Kete_
31/03/13, 18:32:42
Adjunto imágenes de lo que me devuelve la función en 2.2 y en 2.3.

kriogeN
31/03/13, 19:38:53
private String getHtml() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.livescore.com/soccer/spain/");
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";
result = EntityUtils.toString(response.getEntity());
return result;
}

Kete_
31/03/13, 19:46:34
private String getHtml() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.livescore.com/soccer/spain/");
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";
result = EntityUtils.toString(response.getEntity());
return result;
}

Con este código me ocurre lo mismo, hay veces que si que descarga bien la info, pero otras que no...

pmaicas
31/03/13, 22:55:56
Deberías mirar las cabeceras de la respuesta, a ver que pone, por ejemplo se me ocurre que te esté mandando la respuesta comprimida.

set92
01/04/13, 22:45:27
Usa loopj que igual te resulta mas sencillo y yo creo que no te pasaran estos problemas, si no puede ser que te lo devuelva a veces en UTF8 y no muestre bien el utf8 ?
http://loopj.com/android-async-http/

Kete_
02/04/13, 08:13:12
Usa loopj que igual te resulta mas sencillo y yo creo que no te pasaran estos problemas, si no puede ser que te lo devuelva a veces en UTF8 y no muestre bien el utf8 ?
http://loopj.com/android-async-http/

No conocía esta librería, la probaré luego a ver! :)

Kete_
07/04/13, 14:27:42
Usa loopj que igual te resulta mas sencillo y yo creo que no te pasaran estos problemas, si no puede ser que te lo devuelva a veces en UTF8 y no muestre bien el utf8 ?
http://loopj.com/android-async-http/

He estado haciendo pruebas con esta librería y parece que ya lo descarga correctamente también en 2.2!

Muchas gracias!

jmmunoz
07/04/13, 14:38:55
Tipicos problemas de codificación... yo te recomiendo que siempre uses iso...para que funcione ok en todos los idiomas...

kriogeN
07/04/13, 15:38:21
He estado haciendo pruebas con esta librería y parece que ya lo descarga correctamente también en 2.2!

Muchas gracias!

Te funciona correctamente por lo que dice pmaicas, lo más probable es que te esté enviando los datos comprimidos en GZIP. Y android-async-http (loopj es el nombre del creador, no de la librería, también tiene una librería para carga asíncrona de imágenes, pero ya se le ha quedado bastante anticuada y hay otras que le dan 1000 vueltas) gestiona automáticamente los paquetes HTTP comprimidos con GZIP.

Kete_
07/04/13, 19:09:30
Te funciona correctamente por lo que dice pmaicas, lo más probable es que te esté enviando los datos comprimidos en GZIP. Y android-async-http (loopj es el nombre del creador, no de la librería, también tiene una librería para carga asíncrona de imágenes, pero ya se le ha quedado bastante anticuada y hay otras que le dan 1000 vueltas) gestiona automáticamente los paquetes HTTP comprimidos con GZIP.

Aun asi parece extraño que en versiones superiores si sea capaz de manejar esos datos con el mismo código, y que incluso algunas veces si llegase a funcionar...