(HttpClient技术)(HttpClient入门)HttpClient使用详细介绍

1 前言

        网络自动化操作,已经是网络发展中的一个重要趋势,很多复杂繁琐的操作,手动完成,得花费大量的时间,所以,网络自动化操作,就变得越来越普遍,越来越重要。很多应用,都可以使用网络自动化工具去完成,比如批量登陆签到,批量刷票,批量注册邮箱,批量查询用户余额等,那么网络自动化,在java中,应该用什么工具去开发呢,那么首先想到的应该就是HttpClient了,它是网络自动化操作方面,使用起来,实在是太方便了,应用也及其广泛。其他工具,比如HtmlUnit,虽然也有一定的使用,但是比起HttpClient来,实在差的太远了,那么HttpClient到底是什么,到底应该怎么使用呢,我在这里做一个介绍吧.

2 HttpClient介绍

        HttpClient 是 Apache Jakarta Common 下的子项目,它封装了java中URLConnection工具,并且将URLConnection的方法使用,都做了优化,更好的兼容了Http的访问和使用,更好的管理了缓存和Cookies,并且兼容了所有的Http访问的方法,使得,所有的网站,都可以使用这个工具来访问,现在HttpClient最新版本为 4.4,但是最经典的版本是3.x,当然4.3以上的版本,也是相当好用的。
        HttpClient 中,兼容了网络中常用的两种请求方法,分别是get和post,这两种方法,在3.x和4.x中的方法名,都是不一样的(当然,4.x封装的更为完全),但并不是说4.x就是最好用的版本,其实,3.x也有自己独到的一面,在对ssl处理方面,就比4.x,好用的多了。
        简单介绍就说这么多了,下面就对,HttpClient的使用步骤,作个介绍;

3 HttpClient需要的jar包

        HttpClint版本不一样,所需要的jar包也是不一样的,这里就简单介绍一下3.x和4.x所需要的jar包:

        HttpClient3.x需要的jar包:
        commons-httpclient-3.1.jar,commons-codec.jar,commons-io-1.4.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,log4j-1.2.16.jar
        HttpClient4.x需要的jar包:
        httpclient-4.1.1.jar,httpclient-cache-4.1.1.jar,httpcore-4.1.jar,httpmime-4.1.1.jar,commons-logging-1.0.jar,log4j-1.2.16.jar
        后面,我会提供一个专门的 地址给大家,方面下载;

4 HttpClient开发步骤

        开发步骤,大体如下:
        a 首先创建HttpClient实例
        b 创建请求的方法,get请求创建get方法,post请求创建post方法
        c 对创建的方法设置请求头(Header)setRequestHeader(setHeader)
        d 使用httpClient实例,请求方法httpClient.executeMethod(g1)(httpClient.execute(g1))
        e 查看请求状态,是否成功,(g1.getStatusCode() ),200表示请求成功
        f 得到请求后的数据,如请求后的网页,请求后的cookies
        g 释放链接,做其他处理;

5 与HttpClient配套的抓包工具

        HttpClient是无法查看数据包的,如果我们要模拟网页行为,我们必须知道,网页都做所做了什么操作,传了什么参数,用了什么方法,那么,就只能使用抓包工具了,下面介绍几种与之相配用的工具:
        首先,最好用,最广泛的,当然是HttpWatch了,这个兼容ie,使用起来,也很方便
        然后,就是Fiddler,这个工具,使用人数也很多,他能兼容更多的浏览器
        其他,其他的工具也多种多样,我们可以根据自己的需求,选择适合的工具

6 HttpClient开发实例

        HttpClient有3.x和4.x等版本可以使用,这里上传一些例子,仅供学习和参考;
        HttpClient3.x的163邮箱登陆的例子,仅供大家参考:

    HttpClient httpClient =  new HttpClient();   
    httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
        httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);

        httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); 

        if(ip!=null && !ip.equals("")){
            httpClient.getHostConfiguration().setProxy(ip, port) ;
        }

        GetMethod g1 = null;
        GetMethod g2 = null;
        PostMethod g3 = null;
        GetMethod g4 = null;
        GetMethod g5 = null;
        GetMethod g6 = null;
        GetMethod g67 = null;
        //TBlog 
        try {
            g1 = new GetMethod("http://mail.163.com/") ;

            g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
            g1.setRequestHeader("Accept-Language", "zh-CN") ;
            g1.setRequestHeader("Connection", "Keep-Alive") ;
            g1.setRequestHeader("Host", "mail.163.com") ;
            //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ;
            g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;


            //g1.setRequestHeader("Cookie", cookies) ;

            httpClient.executeMethod(g1) ;
            String sg1 = g1.getResponseBodyAsString() ;
            //System.out.println(sg1);

            if(g1.getStatusCode() == 200 ){





                String cookies = "starttime="+System.currentTimeMillis()+"; logType=; nts_mail_user="+username+":-1:1; df=mail163_letter" ;
                String urls = "https://mail.163.com/entry/cgi/ntesdoor?df=" +
                        "mail163_letter" +
                        "&from=web" +
                        "&funcid=loginone" +
                        "&iframe=1" +
                        "&language=-1" +
                        "&passtype=1" +
                        "&product=mail163" +
                        "&net=c&style=-1" +
                        "&race=45_51_179_bj" +
                        "&uid=" +username;
                g3 = new PostMethod(urls) ;

                g3.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
                g3.setRequestHeader("Accept-Language", "zh-CN") ;
                g3.setRequestHeader("Connection", "Keep-Alive") ;
                g3.setRequestHeader("Host", "mail.163.com") ;
                g3.setRequestHeader("Referer", "http://mail.163.com/") ;
                g3.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;                   
                g3.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") ;
                g3.setRequestHeader("Cookie", cookies) ;
                NameValuePair[] data = {
                        new NameValuePair("password",secret),
                        new NameValuePair("savelogin","0"),
                        new NameValuePair("url2","http://mail.163.com/errorpage/error163.htm"),
                        new NameValuePair("username",username)
                };
                g3.setRequestBody(data);
                g3.setRequestHeader("Content-Length", g3.getRequestEntity().getContentLength()+"") ;


                httpClient.executeMethod(g3) ;
                String sg3 = g3.getResponseBodyAsString() ;


                System.out.println(g3.getStatusCode()) ;

                if(g3.getStatusCode()==200  && sg3.indexOf("http://mail.163.com/js6/main.jsp")!=-1){

                    String cookiessession = "" ;
                    Cookie[] cookiesssession = httpClient.getState().getCookies();
                    for (Cookie c : cookiesssession) {
                        cookiessession += c.toString() + ";" ;

                    }
                    System.out.println("cookiessession:" + cookiessession);



                    String urlmain = "" ;
                    sg3 = sg3.substring(sg3.indexOf("http://mail.163.com/js6/main.jsp")) ;
                    urlmain = sg3.substring(0, sg3.indexOf("\"")) ;

                    if(urlmain.indexOf("sid=")!=-1){
                        String newurlmain = urlmain.substring(urlmain.indexOf("sid=")+4) ;
                        if(newurlmain.indexOf("&")!=-1){
                            sid = newurlmain.substring(0, newurlmain.indexOf("&")) ;
                        }
                    }

                    g1 = new GetMethod(urlmain) ;

                    g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
                    g1.setRequestHeader("Accept-Language", "zh-CN") ;
                    g1.setRequestHeader("Connection", "Keep-Alive") ;
                    g1.setRequestHeader("Host", "mail.163.com") ;
                    //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ;
                    g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;


                    g1.setRequestHeader("Cookie", cookiessession+cookies) ;

                    httpClient.executeMethod(g1) ;
                    String sg11 = g1.getResponseBodyAsString() ;
                    //System.out.println(sg11) ;
                    if(g1.getStatusCode()==200 && sg11.indexOf("网易邮箱"</span>)!=-<span class="hljs-number">1</span> && sg11<span class="hljs-preprocessor">.indexOf</span>(<span class="hljs-string">"?ssid="</span>)!=-<span class="hljs-number">1</span>){
                        String cookiessession1 = <span class="hljs-string">""</span> <span class="hljs-comment">;</span>
                        Cookie[] cookiesssession1 = httpClient<span class="hljs-preprocessor">.getState</span>()<span class="hljs-preprocessor">.getCookies</span>()<span class="hljs-comment">;</span>
                        for (Cookie c : cookiesssession1) {
                            cookiessession1 += c<span class="hljs-preprocessor">.toString</span>() + <span class="hljs-string">";"</span> <span class="hljs-comment">;</span>
                            if(c<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.indexOf</span>(<span class="hljs-string">"NTES_SESS="</span>)!=-<span class="hljs-number">1</span>){
                                NTES_SESS = c<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.replace</span>(<span class="hljs-string">"NTES_SESS="</span>, <span class="hljs-string">""</span>) <span class="hljs-comment">;</span>
                            }
                            if(c<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.indexOf</span>(<span class="hljs-string">"Coremail="</span>)!=-<span class="hljs-number">1</span>){
                                Coremail = c<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.replace</span>(<span class="hljs-string">"Coremail="</span>, <span class="hljs-string">""</span>) <span class="hljs-comment">;</span>
                            }
                        }
                        System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(<span class="hljs-string">"cookiessession:"</span> + cookiessession1)<span class="hljs-comment">;</span>

                        sg11 = sg11<span class="hljs-preprocessor">.substring</span>(sg11<span class="hljs-preprocessor">.indexOf</span>(<span class="hljs-string">"?ssid="</span>)+<span class="hljs-number">6</span>) <span class="hljs-comment">;</span>
                        ssid = sg11<span class="hljs-preprocessor">.substring</span>(<span class="hljs-number">0</span>, sg11<span class="hljs-preprocessor">.indexOf</span>(<span class="hljs-string">"'"</span>))<span class="hljs-comment">;</span>


                        String cossss = cookiessession1 + cookies <span class="hljs-comment">;</span>
                        re = true <span class="hljs-comment">;</span>
                        cookiess = cossss <span class="hljs-comment">;</span>

                    }else{
                        System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(<span class="hljs-string">"2"</span>)<span class="hljs-comment">;</span>
                        errorinfo = <span class="hljs-string">"登录失败,进入main.jsp失败"</span> <span class="hljs-comment">;</span>
                    }

                }else{
                    System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(<span class="hljs-string">"2"</span>)<span class="hljs-comment">;</span>
                    errorinfo = <span class="hljs-string">"登录失败,密码或者账号有误"</span> <span class="hljs-comment">;</span>
                }
            }else{
                System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(<span class="hljs-string">"1"</span>)<span class="hljs-comment">;</span>
                errorinfo = <span class="hljs-string">"登录失败,无法访问163网站,请换ip"</span> <span class="hljs-comment">;</span>
            }

        }catch(Exception e){
            System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(e<span class="hljs-preprocessor">.toString</span>())<span class="hljs-comment">;</span>
            //e<span class="hljs-preprocessor">.printStackTrace</span>() <span class="hljs-comment">;</span>
        }finally{
            if(g1!=null){
                g1<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }
            if(g2!=null){
                g2<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }
            if(g3!=null){
                g3<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }
            if(g4!=null){
                g4<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }
            if(g5!=null){
                g5<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }

            if(g67!=null){
                g67<span class="hljs-preprocessor">.releaseConnection</span>() <span class="hljs-comment">;</span>
            }
        }</code></pre> 
  <p>谢谢,欢迎大家 联系 ,大家相互进步!</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1288355648794337280"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(HttpClient,网络爬虫)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835454921990828032.htm"
                           title="Java爬虫框架(一)--架构设计" target="_blank">Java爬虫框架(一)--架构设计</a>
                        <span class="text-muted">狼图腾-狼之传说</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BB%BB%E5%8A%A1/1.htm">任务</a><a class="tag" taget="_blank" href="/search/html%E8%A7%A3%E6%9E%90%E5%99%A8/1.htm">html解析器</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a>
                        <div>一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast</div>
                    </li>
                    <li><a href="/article/1835438028009598976.htm"
                           title="WebMagic:强大的Java爬虫框架解析与实战" target="_blank">WebMagic:强大的Java爬虫框架解析与实战</a>
                        <span class="text-muted">Aaron_945</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文章目录引言官网链接WebMagic原理概述基础使用1.添加依赖2.编写PageProcessor高级使用1.自定义Pipeline2.分布式抓取优点结论引言在大数据时代,网络爬虫作为数据收集的重要工具,扮演着不可或缺的角色。Java作为一门广泛使用的编程语言,在爬虫开发领域也有其独特的优势。WebMagic是一个开源的Java爬虫框架,它提供了简单灵活的API,支持多线程、分布式抓取,以及丰富的</div>
                    </li>
                    <li><a href="/article/1835435506645692416.htm"
                           title="00. 这里整理了最全的爬虫框架(Java + Python)" target="_blank">00. 这里整理了最全的爬虫框架(Java + Python)</a>
                        <span class="text-muted">有一只柴犬</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E7%B3%BB%E5%88%97/1.htm">爬虫系列</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>目录1、前言2、什么是网络爬虫3、常见的爬虫框架3.1、java框架3.1.1、WebMagic3.1.2、Jsoup3.1.3、HttpClient3.1.4、Crawler4j3.1.5、HtmlUnit3.1.6、Selenium3.2、Python框架3.2.1、Scrapy3.2.2、BeautifulSoup+Requests3.2.3、Selenium3.2.4、PyQuery3.2</div>
                    </li>
                    <li><a href="/article/1835342718067372032.htm"
                           title="Python精选200Tips:121-125" target="_blank">Python精选200Tips:121-125</a>
                        <span class="text-muted">AnFany</span>
<a class="tag" taget="_blank" href="/search/Python200%2BTips/1.htm">Python200+Tips</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Spendyourtimeonself-improvement121Requests-简化的HTTP请求处理发送GET请求发送POST请求发送PUT请求发送DELETE请求会话管理处理超时文件上传122BeautifulSoup-网页解析和抓取解析HTML和XML文档查找单个标签查找多个标签使用CSS选择器查找标签提取文本修改文档内容删除标签处理XML文档123Scrapy-强大的网络爬虫框架示例</div>
                    </li>
                    <li><a href="/article/1835332888674004992.htm"
                           title="爬虫之隧道代理:如何在爬虫中使用代理IP?" target="_blank">爬虫之隧道代理:如何在爬虫中使用代理IP?</a>
                        <span class="text-muted">2401_87251497</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>在进行网络爬虫时,使用代理IP是一种常见的方式来绕过网站的反爬虫机制,提高爬取效率和数据质量。本文将详细介绍如何在爬虫中使用隧道代理,包括其原理、优势以及具体的实现方法。无论您是爬虫新手还是有经验的开发者,这篇文章都将为您提供实用的指导。什么是隧道代理?隧道代理是一种高级的代理技术,它通过创建一个加密的隧道,将数据从客户端传输到代理服务器,再由代理服务器转发到目标服务器。这样不仅可以隐藏客户端的真</div>
                    </li>
                    <li><a href="/article/1835157319500001280.htm"
                           title="Python爬虫代理池" target="_blank">Python爬虫代理池</a>
                        <span class="text-muted">极客李华</span>
<a class="tag" taget="_blank" href="/search/python%E6%8E%88%E8%AF%BE/1.htm">python授课</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Python爬虫代理池网络爬虫在数据采集和信息抓取方面起到了关键作用。然而,为了应对网站的反爬虫机制和保护爬虫的真实身份,使用代理池变得至关重要。1.代理池的基本概念:代理池是一组包含多个代理IP地址的集合。通过在爬虫中使用代理池,我们能够隐藏爬虫的真实IP地址,实现一定程度的匿名性。这有助于防止被目标网站封锁或限制访问频率。2.为何使用代理池:匿名性:代理池允许爬虫在请求目标网站时使用不同的IP</div>
                    </li>
                    <li><a href="/article/1834746108983734272.htm"
                           title="盘点一个Python网络爬虫抓取股票代码问题(上篇)" target="_blank">盘点一个Python网络爬虫抓取股票代码问题(上篇)</a>
                        <span class="text-muted">皮皮_f075</span>

                        <div>大家好,我是皮皮。一、前言前几天在Python白银群【厚德载物】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。image.png二、实现过程这个问题其实for循环就可以搞定了,看上去粉丝的代码没有带请求头那些,导致获取不到数据。后来【瑜亮老师】、【小王子】给了具体思路,代码如下图所示:image.png后来【小王子】也给了一个具体代码,如下:importrequestsimportt</div>
                    </li>
                    <li><a href="/article/1834727553160540160.htm"
                           title="WPF中图片的宫格显示" target="_blank">WPF中图片的宫格显示</a>
                        <span class="text-muted">Vae_Mars</span>
<a class="tag" taget="_blank" href="/search/WPF-AI%E5%AF%B9%E8%AF%9D/1.htm">WPF-AI对话</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>1.解释说明-使用ScrollViewer控件来达到滑动的效果-使用WrapPanel的自动换行特性,保证图片在占满横向空间后自动往下排布-使用foreach的方法来游历所有的图片url2.xaml代码示例3.cs代码示例//加载url转换成BitmapImageprivateasyncTaskLoadImageFromUrl(stringurl){try{using(HttpClientclie</div>
                    </li>
                    <li><a href="/article/1834444787751677952.htm"
                           title="OkHttp搞定Http请求" target="_blank">OkHttp搞定Http请求</a>
                        <span class="text-muted">头秃到底</span>

                        <div>文章目录OkHttp依赖包创建OkHttpClient构造UrlHeader头设定Get请求同步Get异步GetPost请求Json内容Form表单文件上传Put请求Json内容参数方式Delete请求OkHttp工具类OkHttp官方文档仓库OkHttp是一款高效的HTTP客户端框架:HTTP/2支持允许对同一主机的所有请求共享一个套接字。连接池可以减少请求延迟(如果HTTP/2不可用)。透明G</div>
                    </li>
                    <li><a href="/article/1833966459693395968.htm"
                           title="python ray分布式_取代 Python 多进程!伯克利开源分布式框架 Ray" target="_blank">python ray分布式_取代 Python 多进程!伯克利开源分布式框架 Ray</a>
                        <span class="text-muted">weixin_39946313</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ray%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">ray分布式</a>
                        <div>Ray由伯克利开源,是一个用于并行计算和分布式Python开发的开源项目。本文将介绍如何使用Ray轻松构建可从笔记本电脑扩展到大型集群的应用程序。并行和分布式计算是现代应用程序的主要内容。我们需要利用多个核心或多台机器来加速应用程序或大规模运行它们。网络爬虫和搜索所使用的基础设施并不是在某人笔记本电脑上运行的单线程程序,而是相互通信和交互的服务的集合。云计算承诺在所有维度上(内存、计算、存储等)实</div>
                    </li>
                    <li><a href="/article/1833577124053741568.htm"
                           title="如何用python爬取股票数据选股_用python爬取股票数据" target="_blank">如何用python爬取股票数据选股_用python爬取股票数据</a>
                        <span class="text-muted">weixin_39752087</span>

                        <div>获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。一、网页源码的获取很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。imp</div>
                    </li>
                    <li><a href="/article/1833444350768541696.htm"
                           title="android 下载txt,Android 下载文件(使用OKHttp)" target="_blank">android 下载txt,Android 下载文件(使用OKHttp)</a>
                        <span class="text-muted">weixin_39942492</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BDtxt/1.htm">下载txt</a>
                        <div>finallongstartTime=System.currentTimeMillis();OkHttpClientokHttpClient=newOkHttpClient();Requestrequest=newRequest.Builder().url(url).addHeader("Connection","close").build();okHttpClient.newCall(reque</div>
                    </li>
                    <li><a href="/article/1833326503971090432.htm"
                           title="接口测试06 -- pytest接口自动化封装&Loggin实战" target="_blank">接口测试06 -- pytest接口自动化封装&Loggin实战</a>
                        <span class="text-muted">糯米不开花ぴ</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/python%E8%BF%9B%E9%98%B6/1.htm">python进阶</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>1.接口关键字封装1.1基本概念接口关键字封装是指:将接口测试过程中常用的操作、验证封装成可复用的关键字(或称为函数、方法),以提高测试代码的可维护性和可复用性。1.2常见的接口关键字封装方式1.发送请求:封装一个函数,接受参数如请求方法、URL、请求头、请求体等,使用相应的库发送请求,如requests库或HttpClient库。---------------->>>></div>
                    </li>
                    <li><a href="/article/1833265732503302144.htm"
                           title="使用 RecursiveUrlLoader 实现递归网页爬取:深入解析与实践指南" target="_blank">使用 RecursiveUrlLoader 实现递归网页爬取:深入解析与实践指南</a>
                        <span class="text-muted">qq_37836323</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>使用RecursiveUrlLoader实现递归网页爬取:深入解析与实践指南1.引言在当今的数字时代,网络爬虫已成为获取和分析大量在线信息的重要工具。LangChain提供的RecursiveUrlLoader是一个强大的工具,能够递归地爬取网页内容,并将其转换为易于处理的文档格式。本文将深入探讨RecursiveUrlLoader的使用方法、特性以及实际应用场景。2.RecursiveUrlLo</div>
                    </li>
                    <li><a href="/article/1832876386780540928.htm"
                           title="Python 协程 & 异步编程 (asyncio) 入门介绍" target="_blank">Python 协程 & 异步编程 (asyncio) 入门介绍</a>
                        <span class="text-muted">linmeiyun</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>在近期的编码工作过程中遇到了async和await装饰的函数,查询资料后了解到这种函数是基于协程的异步函数。这类编程方式称为异步编程,常用在IO较频繁的系统中,如:Tornadoweb框架、文件下载、网络爬虫等应用。协程能够在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能。接下来便简单的讲解一下异步编程相关概念以及案例演示。1.协程简介1.1协程的含义</div>
                    </li>
                    <li><a href="/article/1832831250319110144.htm"
                           title="python网络爬虫(五)——爬取天气预报" target="_blank">python网络爬虫(五)——爬取天气预报</a>
                        <span class="text-muted">光电的一只菜鸡</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.注册高德天气key  点击高德天气,然后按照开发者文档完成key注册;作为爬虫练习项目之一。从高德地图json数据接口获取天气,可以获取某省的所有城市天气,高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://restapi.amap.com/v3/weather/weatherInfo?parameters,若要获取某城市的天气推荐2.安装MongoDB  Mong</div>
                    </li>
                    <li><a href="/article/1832806539996524544.htm"
                           title="顶级的python入门教程!小白到大师,从这篇教程开始!" target="_blank">顶级的python入门教程!小白到大师,从这篇教程开始!</a>
                        <span class="text-muted">马大哈(Python)</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a>
                        <div>1.为什么要学习Python?学习Python的原因有很多,以下是几个主要的原因:广泛应用:Python被广泛应用于Web开发、数据科学、人工智能、机器学习、自动化运维、网络爬虫、科学计算、游戏开发等多个领域。掌握Python意味着你可以在这些领域中找到丰富的职业机会。入门简单:Python的语法简洁明了,易于学习和理解,对于编程初学者来说非常友好。它的代码风格一致,可读性强,有助于培养良好的编程</div>
                    </li>
                    <li><a href="/article/1832632695671320576.htm"
                           title="java后端如何发送http请求" target="_blank">java后端如何发送http请求</a>
                        <span class="text-muted">Lzehui</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>用java后端发送请求需要用到的一个工具包为HttpClient。HttpClient是Apache的一个子项目,是高效的、功能丰富的支持HTTP协议的客户端编程工具包。引入依赖org.apache.httpcomponentshttpclient4.5.13发送GET请求后面附有代码示例第一步:用HttpClients的createDefault()方法,创建httpclient对象,用于后续发</div>
                    </li>
                    <li><a href="/article/1832570671008411648.htm"
                           title="爬虫更换ip地址" target="_blank">爬虫更换ip地址</a>
                        <span class="text-muted">xiaoxiongip666</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>网络爬虫更换IP地址是为了应对网站的反爬策略,如IP限制、频率控制等。IP地址轮换的主要目的是保持匿名性和隐蔽性,防止被目标服务器识别为同一个爬虫客户端。以下是一些常见的IP更换方法:使用代理IP池:通过购买或使用免费的代理IP服务,爬虫程序会周期性地从池中获取一个新的IP地址,然后进行请求。常见的代理服务提供商有小熊IP等。间隔时间更换:爬虫可以在每次请求之间设置一个随机或固定的等待时间,然后更</div>
                    </li>
                    <li><a href="/article/1832459858708885504.htm"
                           title="Python爬虫实战" target="_blank">Python爬虫实战</a>
                        <span class="text-muted">weixin_34007879</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>引言网络爬虫是抓取互联网信息的利器,成熟的开源爬虫框架主要集中于两种语言Java和Python。主流的开源爬虫框架包括:1.分布式爬虫框架:Nutch2.Java单机爬虫框架:Crawler4j,WebMagic,WebCollector、Heritrix3.python单机爬虫框架:scrapy、pyspiderNutch是专为搜索引擎设计的的分布式开源框架,上手难度高,开发复杂,基本无法满足快</div>
                    </li>
                    <li><a href="/article/1832218172359536640.htm"
                           title="Day21—爬虫性能优化技巧" target="_blank">Day21—爬虫性能优化技巧</a>
                        <span class="text-muted">Ztop</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%EF%BC%88%E6%96%B0%E6%89%8B%E6%8E%A8%E8%8D%90%EF%BC%89/1.htm">爬虫(新手推荐)</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>在网络爬虫的开发过程中,性能优化是一个关键环节。一个高效的爬虫不仅能够快速完成任务,还能减轻对目标网站的压力,降低被封禁的风险。本文将讨论如何优化爬虫性能,包括请求头优化、连接池、缓存策略等技巧。1.请求头优化请求头是HTTP请求的重要组成部分,它包含了客户端向服务器发送的元数据。通过优化请求头,可以模拟正常用户的行为,减少被网站识别为爬虫的可能性。User-Agent:设置合适的User-Age</div>
                    </li>
                    <li><a href="/article/1832181101150433280.htm"
                           title="android 网络图片工具类,Android处理网络和图片的工具类详解" target="_blank">android 网络图片工具类,Android处理网络和图片的工具类详解</a>
                        <span class="text-muted">weixin_39787594</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%9B%BE%E7%89%87%E5%B7%A5%E5%85%B7%E7%B1%BB/1.htm">网络图片工具类</a>
                        <div>1:网络的底层环境采用apache的httpClient链接池框架2:图片缓存采用基于LRU的算法3:网络接口采用监听者模式4包含图片的OOM处理(及时回收处理技术的应用)importjava.io.FilterInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.lang.ref.SoftRefere</div>
                    </li>
                    <li><a href="/article/1832145171924480000.htm"
                           title="【网络安全】Bingbot索引投毒实现储存型XSS" target="_blank">【网络安全】Bingbot索引投毒实现储存型XSS</a>
                        <span class="text-muted">秋说</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E6%BC%8F%E6%B4%9E%E6%8C%96%E6%8E%98/1.htm">漏洞挖掘</a>
                        <div>未经许可,不得转载。文章目录前言Bingbot如何运作正文漏洞步骤前言Bing是由微软开发的搜索引擎,提供网页、视频、图片和地图等多种搜索功能。其目标是通过呈现有条理且相关的搜索结果,帮助用户做出更明智的决策。Bingbot是微软开发的网络爬虫,也被称为蜘蛛或搜索引擎机器人,主要用于探索和索引Bing搜索引擎的网页。自2010年10月推出以来,Bingbot通过外部和内部链接发现新网页,并更新已存</div>
                    </li>
                    <li><a href="/article/1832076280342867968.htm"
                           title="Java HttpClient库的使用" target="_blank">Java HttpClient库的使用</a>
                        <span class="text-muted">m2fox</span>

                        <div>简介HttpClient是Apache的一个开源库,相比于JDK自带的URLConnection等,使用起来更灵活方便。使用方法可以大致分为如下八步曲:创建一个HttpClient对象;创建一个Http请求对象并设置请求的URL,比如GET请求就创建一个HttpGet对象,POST请求就创建一个HttpPost对象;如果需要可以设置请求对象的请求头参数,也可以往请求对象中添加请求参数;调用Http</div>
                    </li>
                    <li><a href="/article/1831804946060767232.htm"
                           title="21.7K Star力荐!跨平台的开源免费可视化爬虫,让数据采集不再是难题!" target="_blank">21.7K Star力荐!跨平台的开源免费可视化爬虫,让数据采集不再是难题!</a>
                        <span class="text-muted">科技Ins</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7/1.htm">实用工具</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>朋友们!你是否曾梦想着轻松地从网上抓取数据,却苦于编程技能的门槛?现在,有了EasySpider,这一切都变得触手可及!这不仅仅是一个工具,它是一个革命性的网络爬虫神器,让你能够像专业人士一样,无需编写一行代码,就能轻松设计和执行爬虫任务。无论是动态内容还是复杂页面,EasySpider都能帮你搞定。而且,它完全免费,开源,跨平台,还有活跃的社区支持。准备好了吗?让我们一探究竟,看看EasySpi</div>
                    </li>
                    <li><a href="/article/1831523093407952896.htm"
                           title="爬虫进阶之人见人爱的Scrapy框架--Scrapy入门" target="_blank">爬虫进阶之人见人爱的Scrapy框架--Scrapy入门</a>
                        <span class="text-muted">我真的超级好</span>

                        <div>不要重复造轮子,这是学习Python以来听得最多的一句话,无非就是叫我们要灵活运用现有的库,毕竟Python的一大特点就是拥有功能强大强大而种类丰富的库。那么在爬虫领域要灵活使用哪个轮子呢?--当然是目前最火的爬虫框架Scrapy。笔者通过慕课网免费课程《Python最火爬虫框架Scrapy入门与实践》+书籍《精通Scrapy网络爬虫》+度娘+CSDN完成自学,其中遇到诸多困难(要么太深入没看懂,</div>
                    </li>
                    <li><a href="/article/1831466833060917248.htm"
                           title="python网络爬虫(一)——网络爬虫基本原理" target="_blank">python网络爬虫(一)——网络爬虫基本原理</a>
                        <span class="text-muted">光电的一只菜鸡</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>1.使用BeautifulSoup解析网页  通过request库已经抓取到网页源码,接下来要从源码中找到并提取数据。BeautifulSoup是python的一个库,其主要功能是从网页中抓取数据。BeautifulSoup目前已经被移植到bs4库中,也就是说在导入BeautifulSoup时需要先安装bs4。安装好bs4库后,还需要安装lxml库。如果我们不安装lxml库,就会使用python默</div>
                    </li>
                    <li><a href="/article/1831332601617543168.htm"
                           title="Python爬虫核心面试题2" target="_blank">Python爬虫核心面试题2</a>
                        <span class="text-muted">闲人编程</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E9%9D%A2%E8%AF%95/1.htm">程序员面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/HTTP/1.htm">HTTP</a>
                        <div>网络爬虫1.什么是HTTP协议?它有哪些常见的请求方法?2.在进行网络爬虫时,如何判断一个网站是否允许被爬取?3.在使用HTTP请求时,如何处理重定向?4.解释HTTP状态码200、404、500的含义。5.什么是Session?如何在爬虫中保持Session?6.在爬虫中,如何处理Cookies?7.解释什么是SSL/TLS?如何在爬虫中处理SSL证书验证?8.如何处理请求超时?9.什么是HTT</div>
                    </li>
                    <li><a href="/article/1830890417571328000.htm"
                           title="如何在Java爬虫中设置代理IP:详解与技巧" target="_blank">如何在Java爬虫中设置代理IP:详解与技巧</a>
                        <span class="text-muted">天启代理ip</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a>
                        <div>在进行网络爬虫时,使用代理IP可以有效地避免被目标网站封禁,提升数据抓取的成功率。本文将详细介绍如何在Java爬虫中设置代理IP,并提供一些实用的技巧和示例代码。为什么需要代理IP?在进行爬虫操作时,频繁的请求可能会引起目标网站的注意,甚至导致IP被封禁。就像一只贪心的小猫不停地偷鱼吃,迟早会被发现。为了避免这种情况,我们可以使用代理IP,模拟多个用户,从而降低被封禁的风险。获取代理IP获取代理I</div>
                    </li>
                    <li><a href="/article/1830885750418272256.htm"
                           title="移动端网络框架--基于valley实现" target="_blank">移动端网络框架--基于valley实现</a>
                        <span class="text-muted">Amrecs</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/valley%E6%A1%86%E6%9E%B6/1.htm">valley框架</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E6%A1%86%E6%9E%B6/1.htm">网络框架</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8/1.htm">移动</a>
                        <div>说明:在开发Android项目时自己写的一个网络连接框架,基于valley框架的使用建立了一个支持多线程的、异步下载的、多数据格式的网络框架valley简介:在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的GoogleI/O2013上,Volley发</div>
                    </li>
                                <li><a href="/article/11.htm"
                                       title="VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite" target="_blank">VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite</a>
                                    <span class="text-muted">iwindyforest</span>
<a class="tag" taget="_blank" href="/search/vmware/1.htm">vmware</a><a class="tag" taget="_blank" href="/search/mac+os/1.htm">mac os</a><a class="tag" taget="_blank" href="/search/10.10/1.htm">10.10</a><a class="tag" taget="_blank" href="/search/workstation/1.htm">workstation</a><a class="tag" taget="_blank" href="/search/player/1.htm">player</a>
                                    <div>最近尝试了下VMware下安装MacOS 系统, 
安装过程中发现网上可供参考的文章都是VMware Workstation 10以下, MacOS X 10.9以下的文章, 
只能提供大概的思路, 但是实际安装起来由于版本问题, 走了不少弯路, 所以我尝试写以下总结, 希望能给有兴趣安装OSX的人提供一点帮助。 
  
  
写在前面的话: 
其实安装好后发现, 由于我的th</div>
                                </li>
                                <li><a href="/article/138.htm"
                                       title="关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?" target="_blank">关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?</a>
                                    <span class="text-muted">deathwknight</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a>
                                    <div>本人从学习Java开发到现在已有10年整,从一个要自学 java买成javascript的小菜鸟,成长为只会java和javascript语言的老菜鸟(个人邮箱:deathwknight@163.com) 
 
一路走来,跌跌撞撞。用自己的三年多业余时间,瞎搞一个小东西(基于模型驱动的B/S在线开发平台,非MVC框架、非代码生成)。希望与大家一起分享,同时有许些疑虑,希望有人可以交流下 
 
平台</div>
                                </li>
                                <li><a href="/article/265.htm"
                                       title="如何把maven项目转成web项目" target="_blank">如何把maven项目转成web项目</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a>
                                    <div>创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl</div>
                                </li>
                                <li><a href="/article/392.htm"
                                       title="主管???" target="_blank">主管???</a>
                                    <span class="text-muted">Array_06</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>转载:http://www.blogjava.net/fastzch/archive/2010/11/25/339054.html 
 
 
 
 
很久以前跟同事参加的培训,同事整理得很详细,必须得转! 
 
前段时间,公司有组织中高阶主管及其培养干部进行了为期三天的管理训练培训。三天的课程下来,虽然内容较多,因对老师三天来的课程内容深有感触,故借着整理学习心得的机会,将三天来的培训课程做了一个</div>
                                </li>
                                <li><a href="/article/519.htm"
                                       title="python内置函数大全" target="_blank">python内置函数大全</a>
                                    <span class="text-muted">2002wmj</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div>最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu</div>
                                </li>
                                <li><a href="/article/646.htm"
                                       title="JSP页面通过JQUERY合并行" target="_blank">JSP页面通过JQUERY合并行</a>
                                    <span class="text-muted">357029540</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div>在写程序的过程中我们难免会遇到在页面上合并单元行的情况,如图所示 
 
 
如果对于会的同学可能很简单,但是对没有思路的同学来说还是比较麻烦的,提供一下用JQUERY实现的参考代码 
 
function mergeCell(){ 
        var trs = $("#table tr"); 
&nb</div>
                                </li>
                                <li><a href="/article/773.htm"
                                       title="Java基础" target="_blank">Java基础</a>
                                    <span class="text-muted">冰天百华</span>
<a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a>
                                    <div>学习函数式编程 
package base;

import java.text.DecimalFormat;

public class Main {

	public static void main(String[] args) {
//		Integer a = 4;  
//		Double aa = (double)a  / 100000;  
//		Decimal</div>
                                </li>
                                <li><a href="/article/900.htm"
                                       title="unix时间戳相互转换" target="_blank">unix时间戳相互转换</a>
                                    <span class="text-muted">adminjun</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AC%E6%8D%A2/1.htm">转换</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E6%88%B3/1.htm">时间戳</a>
                                    <div>如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?     Java time   JavaScript Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒   Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135</div>
                                </li>
                                <li><a href="/article/1027.htm"
                                       title="作为一个合格程序员该做的事" target="_blank">作为一个合格程序员该做的事</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a>
                                    <div>作为一个合格程序员每天该做的事   1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 
2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重</div>
                                </li>
                                <li><a href="/article/1154.htm"
                                       title="由html5视频播放引发的总结" target="_blank">由html5视频播放引发的总结</a>
                                    <span class="text-muted">ayaoxinchao</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/video/1.htm">video</a>
                                    <div>前言 
  
项目中存在视频播放的功能,前期设计是以flash播放器播放视频的。但是现在由于需要兼容苹果的设备,必须采用html5的方式来播放视频。我就出于兴趣对html5播放视频做了简单的了解,不了解不知道,水真是很深。本文所记录的知识一些浅尝辄止的知识,说起来很惭愧。 
  
视频结构 
  
本该直接介绍html5的<video>的,但鉴于本人对视频</div>
                                </li>
                                <li><a href="/article/1281.htm"
                                       title="解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat" target="_blank">解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat</a>
                                    <span class="text-muted">bewithme</span>
<a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a>
                                    <div>     如果你构建了一个https协议的站点,而此站点的安全证书并不是合法的第三方证书颁发机构所签发,那么你用httpclient去访问此站点会报如下错误 
  
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu</div>
                                </li>
                                <li><a href="/article/1408.htm"
                                       title="Jedis连接池的入门级使用" target="_blank">Jedis连接池的入门级使用</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/redis%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">redis数据库</a><a class="tag" taget="_blank" href="/search/jedis/1.htm">jedis</a>
                                    <div>Jedis连接池操作步骤如下: 
        a.获取Jedis实例需要从JedisPool中获取; 
        b.用完Jedis实例需要返还给JedisPool; 
        c.如果Jedis在使用过程中出错,则也需要还给JedisPool; 
packag</div>
                                </li>
                                <li><a href="/article/1535.htm"
                                       title="变与不变" target="_blank">变与不变</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%8D%E5%8F%98/1.htm">不变</a><a class="tag" taget="_blank" href="/search/%E5%8F%98/1.htm">变</a><a class="tag" taget="_blank" href="/search/%E4%BA%B2%E6%83%85%E6%B0%B8%E6%81%92/1.htm">亲情永恒</a>
                                    <div>变与不变 
   周末骑车转到了五年前租住的小区,曾经最爱吃的西北面馆、江西水饺、手工拉面早已不在, 
   各种店铺都换了好几茬,这些是变的。 
   三年前还很流行的一款手机在今天看起来已经落后的不像样子。 
   三年前还运行的好好的一家公司,今天也已经不复存在。 
   一座座高楼拔地而起,</div>
                                </li>
                                <li><a href="/article/1662.htm"
                                       title="【Scala十】Scala核心四:集合框架之List" target="_blank">【Scala十】Scala核心四:集合框架之List</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解 
  
1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量 
  
2. 给变量赋值(注意val关键字,a,b</div>
                                </li>
                                <li><a href="/article/1789.htm"
                                       title="Nested Functions in C" target="_blank">Nested Functions in C</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/closure/1.htm">closure</a>
                                    <div>  
Nested Functions 又称closure,属于functional language中的概念,一直以为C中是不支持closure的,现在看来我错了,不过C标准中是不支持的,而GCC支持。 
  
既然GCC支持了closure,那么 lexical scoping自然也支持了,同时在C中label也是可以在nested functions中自由跳转的</div>
                                </li>
                                <li><a href="/article/1916.htm"
                                       title="Java-Collections Framework学习与总结-WeakHashMap" target="_blank">Java-Collections Framework学习与总结-WeakHashMap</a>
                                    <span class="text-muted">BrokenDreams</span>
<a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a>
                                    <div>        总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。 
 
        
强引用:就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集</div>
                                </li>
                                <li><a href="/article/2043.htm"
                                       title="读《研磨设计模式》-代码笔记-解释器模式-Interpret" target="_blank">读《研磨设计模式》-代码笔记-解释器模式-Interpret</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 

package design.pattern;

/*
 * 解释器(Interpreter)模式的意图是可以按照自己定义的组合规则集合来组合可执行对象
 * 
 * 代码示例实现XML里面1.读取单个元素的值 2.读取单个属性的值
 * 多</div>
                                </li>
                                <li><a href="/article/2170.htm"
                                       title="After Effects操作&快捷键" target="_blank">After Effects操作&快捷键</a>
                                    <span class="text-muted">cherishLC</span>
<a class="tag" taget="_blank" href="/search/After+Effects/1.htm">After Effects</a>
                                    <div>1、快捷键官方文档 
 
 
 中文版:https://helpx.adobe.com/cn/after-effects/using/keyboard-shortcuts-reference.html  
 英文版:https://helpx.adobe.com/after-effects/using/keyboard-shortcuts-reference.html  
 
 
 2、常用快捷键</div>
                                </li>
                                <li><a href="/article/2297.htm"
                                       title="Maven 常用命令" target="_blank">Maven 常用命令</a>
                                    <span class="text-muted">crabdave</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>Maven 常用命令 
  
mvn archetype:generate 
mvn install 
mvn clean 
mvn clean complie 
mvn clean test 
mvn clean install 
mvn clean package 
mvn test 
mvn package 
mvn site 
  
mvn dependency:res</div>
                                </li>
                                <li><a href="/article/2424.htm"
                                       title="shell bad substitution" target="_blank">shell bad substitution</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                                    <div>#!/bin/sh 
 
/data/script/common/run_cmd.exp 192.168.13.168 "impala-shell -islave4 -q 'insert OVERWRITE table imeis.${tableName} select ${selectFields}, ds, fnv_hash(concat(cast(ds as string), im</div>
                                </li>
                                <li><a href="/article/2551.htm"
                                       title="Java SE 第二讲(原生数据类型 Primitive Data Type)" target="_blank">Java SE 第二讲(原生数据类型 Primitive Data Type)</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>Java SE  第二讲: 
 
1.   Windows: notepad, editplus, ultraedit, gvim 
Linux: vi, vim, gedit 
 
2.   Java 中的数据类型分为两大类: 
1)原生数据类型  (Primitive Data Type) 
2)引用类型(对象类型)  (R</div>
                                </li>
                                <li><a href="/article/2678.htm"
                                       title="CGridView中实现批量删除" target="_blank">CGridView中实现批量删除</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>1,CGridView中的columns添加 
array(
                        'selectableRows' => 2,
                        'footer' => '<button type="button" onclick="GetCheckbox();" style=&</div>
                                </li>
                                <li><a href="/article/2805.htm"
                                       title="Java中泛型的各种使用" target="_blank">Java中泛型的各种使用</a>
                                    <span class="text-muted">dyy_gusi</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B/1.htm">泛型</a>
                                    <div>Java中的泛型的使用:1.普通的泛型使用 
在使用类的时候后面的<>中的类型就是我们确定的类型。 
public class MyClass1<T> {//此处定义的泛型是T
    private T var;

    public T getVar() {
        return var;
    }

    public void setVa</div>
                                </li>
                                <li><a href="/article/2932.htm"
                                       title="Web开发技术十年发展历程" target="_blank">Web开发技术十年发展历程</a>
                                    <span class="text-muted">gcq511120594</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                                    <div>回顾web开发技术这十年发展历程: 
Ajax 
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。 
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a</div>
                                </li>
                                <li><a href="/article/3059.htm"
                                       title="openSession()与getCurrentSession()区别:" target="_blank">openSession()与getCurrentSession()区别:</a>
                                    <span class="text-muted">hetongfei</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>来自 http://blog.csdn.net/dy511/article/details/6166134 
1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。 
2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。 
这里getCurrentSession本地事务(本地</div>
                                </li>
                                <li><a href="/article/3186.htm"
                                       title="第一章 安装Nginx+Lua开发环境" target="_blank">第一章 安装Nginx+Lua开发环境</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/openresty/1.htm">openresty</a>
                                    <div>首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒</div>
                                </li>
                                <li><a href="/article/3313.htm"
                                       title="HSQLDB In-Process方式访问内存数据库" target="_blank">HSQLDB In-Process方式访问内存数据库</a>
                                    <span class="text-muted">liyonghui160com</span>

                                    <div>  
  
HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。 
  
先睹为快! 
  
下面是一个In-Process方式访问内存数据库的代码示例: 
  
  
下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8) 
  
import java.s</div>
                                </li>
                                <li><a href="/article/3440.htm"
                                       title="Java线程的5个使用技巧" target="_blank">Java线程的5个使用技巧</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                                    <div>Java线程有哪些不太为人所知的技巧与用法?     萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常 
工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法。比如说线程。没错,就是线程。或者确切说是Thread这个类。当我们在构建高可扩展性系统的时候,通常会面临各种各样的并发编程的问题,不过我们现在所要讲的可能会略有不同。   </div>
                                </li>
                                <li><a href="/article/3567.htm"
                                       title="开发资源大整合:编程语言篇——JavaScript(1)" target="_blank">开发资源大整合:编程语言篇——JavaScript(1)</a>
                                    <span class="text-muted">shoothao</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>概述:本系列的资源整合来自于github中各个领域的大牛,来收藏你感兴趣的东西吧。           
  程序包管理器  
  管理javascript库并提供对这些库的快速使用与打包的服务。 
 
  Bower - 用于web的程序包管理。 
  component - 用于客户端的程序包管理,构建更好的web应用程序。 
  spm - 全新的静态的文件包管</div>
                                </li>
                                <li><a href="/article/3694.htm"
                                       title="避免使用终结函数" target="_blank">避免使用终结函数</a>
                                    <span class="text-muted">vahoa.ma</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。 
  
    我自己总结了一下这一条的综合性结论是这样的: 
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>