我们有一些非常基本的代码可以从URL下载内容。它在大多数情况下工作正常,但是我们遇到了一对夫妇或者url,它不能在j6或者7中运行,但是在j5中运行。无法使用Java 6或7下载URL - 使用Java 5
这是相当标准代码:
不起作用URL url = new URL(sUrl);
URLConnection urlCon = url.openConnection();
if (debug)
System.out.println("GETURL DEBUG : set user aganet");
urlCon.setRequestProperty("User-Agent", "SportsPunter.com Robot");
urlCon.setRequestProperty("Accept-Encoding", "gzip");
urlCon.setUseCaches(false);
if (debug)
System.out.println("GETURL DEBUG : set more properites");
InputStream is = urlCon.getInputStream();
BufferedReader br = null;
String urlencoding = urlCon.getContentEncoding();
if (debug)
System.out.println("GETURL DEBUG : got url encoding " + urlencoding);
if (urlencoding == null)
urlencoding = "";
if (urlencoding.toLowerCase().indexOf("gzip") != -1) {
if (encoding.length() == 0)
br = new BufferedReader(new InputStreamReader(new GZIPInputStream(is)));
else
br = new BufferedReader(new InputStreamReader(new GZIPInputStream(is), encoding));
} else {
if (encoding.length() == 0)
br = new BufferedReader(new InputStreamReader(is));
else
br = new BufferedReader(new InputStreamReader(is, encoding));
}
String buffer = "";
StringBuffer sb = new StringBuffer(suggestedSize);
long start = System.currentTimeMillis();
if (debug)
System.out.println("GETURL DEBUG : start reading");
while ((buffer = br.readLine()) != null) {
if (debug)
System.out.println("GETURL DEBUG : got buffer " + buffer);
// irrelevant code snip
}
if (debug)
System.out.println("GETURL DEBUG : finished");
当Java 6中(/java-1.6.0-openjdk-1.6运行的输出。 0.0.x86_64)或Java 7(jdk1.7.0_71)如下:
的getURL DEBUG:开始在星期二10月28日21点13分52秒EDT 2014
的getURL DEBUG:检查时间住
的getURL DEBUG:设置用户aganet
的getURL DEBUG:设置更多的性质在
的getURL DEBUG:打开输入流
的getURL DEBUG:得到URL编码空
的getURL DEBUG:开始阅读
的getURL DEBUG:完成
正如你所看到的,第一次调用readLine()会返回一个EOF。这是相同的,如果我们使用读,而不是()的readLine()
然而,如果我们改变使用Java 5(JRE-1.5.0)
然后缓存被所有阅读没有问题。
感兴趣的一点是,这两个URL似乎都重定向到https连接。
我们一直有一些连接问题,由于心跳加速而导致更改。我们的解决方案是设置系统属性: System.setProperty(“https.protocols”,“TLSv1”);
而不是我们曾经拥有的: System.setProperty(“https.protocols”,“SSLv3,SSLv2Hello”);
但是,此属性的任何值都会导致相同的结果。
如果我们试图直接下载HTTPS版本,我们得到这样的: [danielk @机器人类] $ ./geturl “https://www.beteasy.com.au” 的getURL DEBUG:开始于周二10月28日21时44分28秒EDT 2014 的getURL DEBUG:检查时间住 的getURL DEBUG:设置用户aganet 的getURL DEBUG:设置更多的性质在 的getURL DEBUG:打开输入流
同样,在Java 5中,我们没有得到这个例外,并且数据被成功地从下载网址。
下面是代码,我们已经设置到据称接受任何证书:
你试过'url.openStream()'? – Babel 2014-10-29 01:42:56
您的代码最后缺失... – Pokechu22 2014-10-29 02:20:47