使用 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
我正在尝试使用缓冲 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