当你使用java程序检索其他网站上的内容时,如果其服务器设置了禁止抓取,或者其访问需要权限,
如果此时你去检索网页那么就会有异常该异常出现.
如果是服务器需要访问权限,比如说你要登录才能访问的网页,那么你抓取不了的.
如果是服务器端禁止抓取,那么这个你可以通过设置User-Agent来欺骗服务器
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
什么是User Agent呢?
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
public String getContent(String url1) {
BufferedReader in = null;
StringBuffer sb = null;
try {
URL url = new URL(url1);
// in = new BufferedReader(new InputStreamReader(url.openStream()));
/** 修改 ****************/
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
/*********************/
String line;
sb = new StringBuffer();
while ((line = in.readLine()) != null) {
sb.append(line);
}
} catch (Exception ex) {
ex.printStackTrace();
log.error("HTTP Connection 读取接口数据时出错:" + ex.getMessage());
return "-2";
} finally {
if (null != in) {
try {
in.close();
} catch (IOException ex1) {
}
}
}
return sb.toString();
}
注:每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络。请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响。如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字。