Java URLConnection работает с Windows, но не с Linux - PullRequest
1 голос
/ 09 марта 2012

В моей java-программе я использую URLConnection для получения URL-адреса. Под windows работает нормально, но под linux не работает. И я хочу знать, почему.

коды:

Properties prop = System.getProperties();
prop.setProperty("http.proxyHost", "127.0.0.1");
prop.setProperty("http.proxyPort", "8080");
System.setProperty("sun.net.client.defaultConnectTimeout", "20000");   
System.setProperty("sun.net.client.defaultReadTimeout", "20000");   
URLConnection conn = new URL(url).openConnection();
InputStream is = conn.getInputStream();
byte [] buff = new byte[is.available()];//1024];
int read = is.read(buff);
System.out.println("buff:" + buff.length);
String result = "";
if(read > 0) {
    result = new String(buff, 0, read);
    read = is.read(buff);
    System.out.println("result:" + result);
}

Оказывается, что байт пуст и читается = 0.

Но под окнами все работает нормально.

Я также попытался установить поле User-Agent, которое ничем не отличается.

HttpURLConnection также пробовал, та же проблема.

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080));
HttpURLConnection conn = (HttpURLConnection)(new URL(url).openConnection(proxy));

Этот способ тоже пробовал. Сбой либо.

Все эти способы отлично работают с Windows.

URL можно нормально открыть с помощью firefox на этом компьютере, используя тот же прокси, кстати.

1 Ответ

1 голос
/ 09 марта 2012

В javadocs для метода available () указано:

Возвращает оценку количества байтов, которые можно прочитать (или пропустить) извходной поток без блокировки при следующем вызове метода для этого входного потока.

Ключ "без блокировки".Метод не возвращает количество байтов, которое, как ожидается, будет длиной содержимого URL, с которого вы пытаетесь прочитать.Использование буфера фиксированного размера должно решить вашу проблему вместо InputStream.available (), который может вернуть 0.

...