网络编程之URL以及下载资源403错误解决方式

* URL:IP定位计算机,端口定位计算机里的软件,那么URL是定位软件里的资源。
 *    URL是属于URI的分类,下面还有URN:
 *    URI:统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。
 *    URL:统一资源定位符,一种定位资源的主要访问机制的字符串,一个
 *    标准的URL必须包含:协议、存放资源的主机域名、端口号(默认80)、资源文件名
 *    (参数、锚点),加上后面两个就是完整的,
 *    比如:http://www.google.com:80/index.html。
 *    URN:统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
 *超链接与锚点:锚点:同一个网站或同一个页面的跳转,可以直接定位;
 *       超链接:同一个网站或不同的网站都可以,是跳转。
 *网络三大基石:html、http、url。
 *URL类:统一资源定位器

获取基本信息:

        URL url = new URL("http://www.google.com:80/index.html?name=oyh#a");
        System.out.println("协议"+url.getProtocol());
        System.out.println("域名"+url.getHost());
        System.out.println("端口"+url.getPort());
        System.out.println("请求资源1"+url.getFile());
        System.out.println("请求资源2"+url.getPath());
        System.out.println("参数"+url.getQuery());
        System.out.println("锚点"+url.getRef());

结果:

协议http
域名www.google.com
端口80
请求资源1/index.html?name=oyh
请求资源2/index.html
参数name=oyh
锚点a

下载资源:

        /*
        网络爬虫
        1.得到一个URL
        2.下载资源,这个不是哪个网站都会让你下载的,一个不安全,再则服务器压力大
        3.分析数据,用到正则表达式,因为数据都是有规律的
        4.处理数据:清洗、存等
         */
        URL jd = new URL("http://www.jd.com");
        InputStream is = jd.openStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        String msg = null;
        while(null !=(msg =br.readLine())){
            System.out.println(msg);//内容都在,可以存在文件里,控制台只输出一部分
        }
        br.close();

但不是所有网站都会给你下载资源的,比如下面这个:

URL jd = new URL("http://www.dianping.com");

执行:

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL

报错了,那么我们可以模拟浏览器来骗过网站,

 /*
        这个地址按照上面的方式去下载会报403错误,因为被拒绝了,可以模拟浏览器。
//         */
        URL url1 = new URL("http://www.dianping.com");
        HttpURLConnection conn = (HttpURLConnection )url1.openConnection();
        conn.setRequestMethod("GET");
        //下面括号里的是HTTP请求协议
        conn.setRequestProperty("User-Agent"," Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36");
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
        String msg = null;
        while(null !=(msg =br.readLine())){
            System.out.println(msg);//内容都在,可以存在文件里,控制台只输出一部分
        }
        br.close();

结果:只截取一部分

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="sogou_site_verification" content="qxQgbwO3cZ"/>
        <meta name="shenma-site-verification" content="688cc4e286b23880eb0eaec7476aecbe_1492066611"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>

        <title>广州美食_生活_团购_旅游_电影_优惠券 - 大众点评网</title>
        <script>
            var _start = +new Date();
        </script>
        <meta name="keyword" content="广州点评, 广州团购, 广州美食, 广州优惠券, 广州生活服务,  广州餐厅,  广州电影票" />
        <meta name="description" content="推荐 广州吃喝玩乐优惠信息,提供美食餐厅、酒店旅游、电影票、家居装修、美容美发、运动健身等各类生活服务,通过海量真实消费评论的聚合,帮您选到满意商家。" />        
        <!--网页标题左侧显示-->
        <link rel="icon"  type="image/x-icon"  href="//www.dpfile.com/app/pc-common/dp_favicon.a4af753914321c8e82e402e2b4be01d7.ico">
        <!--收藏夹显示图标-->
        <link rel="shortcut icon" type="image/x-icon" href="//www.dpfile.com/app/pc-common/dp_favicon.a4af753914321c8e82e402e2b4be01d7.ico" >
        <link rel="stylesheet" type="text/css" href="//www.dpfile.com/app/pc-common/index.min.30301999a81455aaf8a16973b3b13888.css">
      

上面解决403错误的代码里的HTTP协议,我们可以打开任意一个网站,按F12调试,然后随意点击网站一下,调试窗口会出来信息,就在Request Headers下面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值