• Jsoup 抓取和数据页 认识HTTP头


    推荐一本书:黑客攻防技术宝典.Web实战篇  ;

          顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干一件非常无耻的事(源代码保密)。呵呵。接下来简单的介绍下JSOUP。

          jsoup 是一款基于Java 的HTML解析器。可直接解析某个URL地址、HTML文本字符串、HTML文件。它提供了一套很省力的API。可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

         官网下载地址:http://jsoup.org/download,下载core library。导入项目

         1:解析HTML文本字符串

    [java] view plaincopy
    1.   /** 
    2. * 解析一个html文档。

      String类型 

    3. */  
    4. ublic static void parseStringHtml(String html) {  
    5. Document doc = Jsoup.parse(html);//把String转化成document格式       
    6. Elements e=doc.body().getAllElements();//获取所以body下的节点集  
    7. Elements e1=doc.select("head");//获取head 节点集  
    8. Element e2=doc.getElementById("p");//获取html上id=“p”的节点  
    9. System.out.println(e1);  
        2:解析url。

    这部分是重点有部分网址不一定都能直接获取连接。for example  :CSDN这样的域名站点。这样的一定要设置消息头代理。    否则报错:像HTTP error fetching URL. Status=403。

    等http状态异常。详细HTTP状态返回码可參照最后部分,或者推荐的那本书

    [java] view plaincopy
    1.     /** 
    2.      * 通过请求地址获取html 
    3.      */  
    4.     public static void parseRequestUrl(String url) throws IOException{  
    5.         Connection con = Jsoup.connect(url);//获取请求连接  
    6. //      //浏览器可接受的MIME类型。

        

    7. //      con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  
    8. //      con.header("Accept-Encoding", "gzip, deflate");  
    9. //      con.header("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");  
    10. //      con.header("Connection", "keep-alive");  
    11. //      con.header("Host", url);  
    12. //      con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");  
    13.         Document doc=con.get();  
    14.         Elements hrefs=doc.select("a[href=/kff517]");  //节点后面属性 不须要  
    15.         Elements test=doc.select("html body div#container div#body div#main div.main div#article_details.details div.article_manage span.link_view");  
    16.         System.out.println(hrefs);  
    17.         System.out.println(test.text());//==.html获取节点中的文本,类似于js中的方法  
    18.     }  

        3解析一个本地html文件。这个大同小异,改变下DOCUMENT的获取方式。


    整理了一些关于HTTP 消息头资料:

    GET /simple.htm HTTP/1.1<CR>  ---请求方式。请求对象。请求http协议
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<CR>      --指浏览器能接收的Content-type
    Accept-Language: zh-cn<CR>   ---接收语言
    Accept-Encoding: gzip, deflate<CR>   --接收编码
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR>    本机的相关系信息。包含浏览器类型、操作系统信息等,非常多站点能够显示出你所使用的浏览器和操作系统版本号,就是由于能够从这里获取到这些信息。
    Host: localhost:8080<CR> 主机和port,在互联网上一般指域名
    Connection: Keep-Alive<CR> 是否须要持久连接
    <CR>

    server发回的完整HTTP消息例如以下:
    HTTP/1.1 200 OK<CR>    ---HTTP/1.1 表示表示所用的协议。200OK 指server返回的状态码。正常返回
    Server: Microsoft-IIS/5.1<CR>   
    X-Powered-By: ASP.NET<CR>
    Date: Fri, 03 Mar 2006 06:34:03 GMT<CR>   
    Content-Type: text/html<CR>
    Accept-Ranges: bytes<CR>
    Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR>
    ETag: "5ca4f75b8c3ec61:9ee"<CR>
    Content-Length: 37<CR>
    <CR>
    <html><body>hello world</body></html>

    注意:<CR>是我加上去代表换行的。能够删掉,没有意义

    HTTP请求头概述 
       HTTP客户程序(比如浏览器。向server发送请求的时候必须指明请求类型(通常是GET或者POST。如必要。客户程序还能够择发送其它的请求头。

    大多数请求头并非必需的,但Content- Length除外。对于POST请求来说Content-Length必须出现。

     
     以下是一些最常见的请求头 

         Accept:浏览器可接受的MIME类型。 表示我们所用的浏览器能接受的Content-type
       Accept-Charset:浏览器可接受的字符集。 
       Accept-Encoding:浏览器可以进行解码的数据编码方式。比方gzip。Servlet可以向支持gzip的浏览器返回经gzip编码的HTML页面。

    很多情形下这可以降低5到10倍的下载时间。 
       Accept-Language:浏览器所希望的语言种类,当server可以提供一种以上的语言版本号时要用到。

     
       Authorization:授权信息,通常出如今对server发送的WWW-Authenticate头的应答中。 
       Connection:表示是否须要持久连接。假设Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP 1.1 (HTTP 1.1默认进行持久连接。它就能够利用持久连接的长处,当页面包括多个元素时(比如Applet,图片,显著地降低下载所须要的时间。要实现这一点,Servlet须要在应答中发送一个Content-Length头。最简单的实现方法是:先把内容写入 ByteArrayOutputStream。然后在正式写出内容之前计算它的大小。

     
       Content-Length:表示请求消息正文的长度。

     
       Cookie:这是最重要的请求头信息之中的一个
       From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 
       Host:初始URL中的主机和port。

     
       If-Modified-Since:仅仅当所请求的内容在指定的日期之后又经过改动才返回它。否则返回304"Not Modified"应答。 
       Pragma:指定"no-cache"值表示server必须返回一个刷新后的文档,即使它是代理server并且已经有了页面的本地拷贝。 
       Referer:包括一个URL,用户从该URL代表的页面出发訪问当前请求的页面。 
         User-Agent:浏览器类型,假设Servlet返回的内容与浏览器类型关则该值很常使用。 
       UA-Pixels,UA-Color。UA-OS,UA-CPU:由某些版本号的IE浏览器所发送的非标准的请求头,表显示屏尺寸、颜色深度、操作系统和CPU种类。

     

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4657508.html
Copyright © 2020-2023  润新知