您的位置:首页 > 理论基础 > 计算机网络

用户代理异常:java.io.IOException: Server returned HTTP response code: 403 for URL

2015-07-13 11:14 543 查看
当你使用java程序检索其他网站上的内容时,如果其服务器设置了禁止抓取,或者其访问需要权限,

如果此时你去检索网页那么就会有异常该异常出现.

如果是服务器需要访问权限,比如说你要登录才能访问的网页,那么你抓取不了的.

如果是服务器端禁止抓取,那么这个你可以通过设置User-Agent来欺骗服务器

connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。  

一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
示例代码:

public static String fetchHtml(String urlString) {
try {
java.net.URL url = new java.net.URL(urlString); // 根据 String 表示形式创建 URL 对象。
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection(); // 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//设置代理
java.io.InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream()); // 返回从此打开的连接读取的输入流。
java.io.BufferedReader br = new java.io.BufferedReader(isr); // 创建一个使用默认大小输入缓冲区的缓冲字符输入流。

String temp;
StringBuffer html = new StringBuffer();
while ((temp = br.readLine()) != null) { //按行读取输出流
if (!temp.trim().equals("")) {
html.append(temp).append("\n"); //读完每行后换行
}
}
br.close(); //关闭
isr.close(); //关闭
return html.toString(); //返回此序列中数据的字符串表示形式。
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: