2015-03-08 70 views
1

我試圖使用緩衝讀者像如下使用Java的BufferedReader從URL

String charset = "UTF-8"; 
URLConnection connection = new URL(url).openConnection(); 
    connection.addRequestProperty("User-Agent", 
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
    connection.setRequestProperty("Accept-Charset", charset); 
    InputStream response = connection.getInputStream(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(response,charset)); 

然後我讀它一行行這樣的讀取所有從頁面的HTML得到的HTML:

String data = br.readLine(); 
while(data != null){ 
data = br.readLine(); 
} 

的問題是我得到這樣的:

}$B!)(BL$B!)(Bu"~$B!)$(D"C(B|X$B!x!)!x(B} 

我已經試過這樣:

do { 
     data = br.readLine(); 
     SortedMap<String, Charset> map = Charset.availableCharsets(); 
     for(Map.Entry<String, Charset> entry : map.entrySet()){ 
      System.out.println(entry.getKey()); 

      try { 
       System.out.println(new String(data.getBytes(entry.getValue()))); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
}while(data!=null) 

我沒有得到任何可讀的html。這真的很奇怪,因爲它工作正常,直到今天早上,我沒有改變任何東西。 我在這裏做錯了什麼?是否有可能在我正在嘗試閱讀的網站中更改某些內容?請幫忙。

+0

看起來像你正在訪問的數據流或加密的網站......但不可能說不知道URL ... – 2015-03-08 18:49:11

+0

好吧。 。我怎麼知道這個網站是加密的?感謝您的回覆 – 2015-03-08 21:03:50

+0

看看協議,它是https嗎?你訪問一個域或URL更深的路徑?那麼也許這只是一個流......但正如我所說沒有url沒有確定......如果你想保密,請不要求助,並告知你自己的網絡協議...... – 2015-03-08 21:19:42

回答

0

服務器已經改變了他的傳輸模式壓縮的數據,你可以在響應頭看到服務器:

Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:text/html; charset=utf-8 
Date:Mon, 09 Mar 2015 09:34:41 GMT 
Server:nginx 
Transfer-Encoding:chunked 
Vary:Accept-Encoding 
X-Powered-By:PHP/5.5.16-pl0-gentoo 

正如你所看到的內容編碼設置爲gzip壓縮Content-Encoding:gzip。 所以你要壓縮的內容第一解碼:

GZIPInputStream gzis = new GZIPInputStream(connection.getInputStream()); 
BufferedReader br = new BufferedReader(new InputStreamReader(gzis,charset)); 

要查看請求和響應,你可以使用網絡監視器(見Free Network Monitor)的頭。

更簡單的方法是使用集成在大多數常用瀏覽器中的開發人員插件。這裏是Chrome DevTools的文檔,如何使用網絡選項卡:https://developer.chrome.com/devtools/docs/network

+1

謝謝馬文,我讚賞它。你能告訴我你在哪裏找到這些信息的內容類型和編碼? – 2015-03-09 13:26:06

+0

如果你感謝它的投票答案,也:)我編輯了答案,所以看看它;) – 2015-03-09 13:33:20