使用 Java bufferedreader 从 URL 获取 html

Using Java bufferedreader to get html from URL

我正在尝试使用缓冲 reader 从页面读取所有 html,如下所示

 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));

然后我像这样逐行阅读它:

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。这真的很奇怪,因为它在今天早上之前工作正常而且我没有改变任何东西.. 我在这里做错了什么?我正在尝试阅读的网站是否有可能发生变化?请帮忙

服务器已将其传输模式更改为压缩数据,您可以从服务器的响应中看到 header:

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));

要查看 header 的请求和响应,您可以使用网络监视器(参见 Free Network Monitor)。

使用大多数常见浏览器中集成的开发人员插件更简单。这是 Chrome DevTools 的文档,如何使用网络选项卡:https://developer.chrome.com/devtools/docs/network