我們有一些非常基本的代碼可以從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