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

当你使用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;
        }
    }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值