现在是用curl采集一个站点。
例如有10个页面,域名是一样的只不过文件名不一样如下:
http://www.abc.com/1.php
http://www.abc.com/2.php
........................
http://www.abc.com/10.php例如要在一次请求当中用for循环一次抓取这10个页面的内容,并处一些处理,但我考虑到速度问题可不可以在第一次循环之后告诉abc.com的服务器我还要再请求2.php或者这个服务器的其它内容,不要断开链接。这样能行吗?有办法没有啊?

解决方案 »

  1.   

    这就是之前我提起过的那个"keepalive"
      

  2.   

    不行!
    HTTP 是无状态协议
      

  3.   

    http 本身就是一来一回,不可能的事吧
      

  4.   

    http 1.1好行有个keeplive哦!具体的我记不清了
      

  5.   


    跟HTTP的状态无关,长连接只是告诉服务器,本HTTP会话完成后,不要立即关闭socket,
    而是等待一个给定的时间,如果超过这个时间仍然没有新的请求发送过去,那么就关闭socket,
    在失效之前,可以再次进行新的HTTP会话,这个会话跟前一次的会话没有任何关联,
    仅仅是复用了前一次的socket连接。
      

  6.   

    (Request-Line) GET / HTTP/1.1
    Host www.baidu.com
    User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
    Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset x-gbk,utf-8;q=0.7,*;q=0.7
    Keep-Alive 300
    Connection keep-alive
    Cookie BAIDUID=D2724D19FEAE5E9AFB50D2FF62625E56:FG=1
    Cache-Control max-age=0这两行便是长连接的秘密所在,当然,服务器可以忽略掉它,不过一般是支持的。
    Keep-Alive 300
    Connection keep-alive
    长连接,使得向相同web服务请求时,不用重复的建立和销毁连接,大大提高性能。
    一般浏览一个页面时,也会请求css,jpeg,js等其它文件,而且总量还不小,
    如果没有长连接,光建立销毁那么多次socket连接就要耗费不少时间,
    特别是有连接数限制的浏览器。