【发布时间】:2012-03-09 05:42:05
【问题描述】:
在我的 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);
}
原来byte是空的,read=0。
但是在windows下它可以正常工作。
我也试过设置 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。
可以在这台电脑上使用相同的代理使用firefox很好地打开网址,顺便说一句。
【问题讨论】:
-
通过将
byte [] buff = new byte[is.available()];更改为byte [] buff = new byte[1024];来工作似乎is.available()不起作用,但为什么呢? -
它工作正常,只是不像你认为的那样。检查Javadoc。
available()的正确用法很少,这不是其中之一。
标签: java linux httpurlconnection urlconnection