В моем приложении мне нужно загрузить некоторую веб-страницу. Я делаю это так, как этотURLConnection не читает целую страницу
URL url = new URL(myUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000000);//5 seconds to download
conn.setConnectTimeout(5000000);//5 seconds to connect
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
is = conn.getInputStream();
String s = readIt(is, len);
System.out.println("got: " + s);
Мой readIt
функции:
public String readIt(InputStream stream) throws IOException {
int len = 10000;
Reader reader;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
Проблема заключается в том, что он не халявные всю страницу. Например, если myUrl
является «https://wikipedia.org», то выход
Как я могу скачать всю страницу?
Обновление Второй ответ отсюда Read/convert an InputStream to a String решил мою проблему. Проблема заключается в функции readIt
. Вы должны прочитать ответ от InputStream
, как это:
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
Возможно, сделать время чтения дольше? – lonesome
@lonesome выглядит так, как будто я нашел решение здесь: https://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string – PepeHands
@lonesome readInt от 'developer.android.com' работает странный. Если я прочитаю, используя этот трюк 'java.util.Scanner s = new java.util.Scanner (is) .useDelimiter (" \\ A "); return s.hasNext()? s.next(): ""; 'тогда все нормально – PepeHands