• Python 的PyCurl模块使用


    PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。它的功能很强大,PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。如果你需要些简单或纯 Python 的模块,你可以参考一下 urllib2 或 urlgrabber 。

     

    Project Address:
     
    http://pycurl.sourceforge.net/
     
    Pypi:
     
    https://pypi.python.org/pypi/pycurl
     
    Github:
     
    https://github.com/pycurl/pycurl
     
    pip install:
        liushadeMacBook-Pro:~ LiuSha$ sudo pip install pycurl
     

    pycurl常用方法

    ##pycurl.Curl()类实现一个ibcurl包的Curl句柄对象,Curl对象常用的方法如下##
    close():
        对应libcurl包中curl_easy_cleanup方法,无参数,实现关闭回收Curl对象。
     
    perform():
        对应libcurl包中curl_easy_perform方法,无参数,实现Curl对象请求的提交。
     
    setopt(option,value):
        对应libcurl包中curl_easy_setopt方法,参数option通过libcurl的常量来定义,参数value的值会依赖option,可以是一个字符串、整形、长整形、文件对象、列表、函数等。
     
    ###模块导入###
    >>> import pycurl
    ###创建curl对象###
    >>> curl = pycurl.Curl()
    ###连接等待时间,0则不等待###
    >>> curl.setopt(pycurl.CONNECTTIMEOUT,5)
    ###超时时间###
    >>> curl.setopt(pycurl.TIMEOUT,5)
    ###下载进度条,非0则屏蔽###
    >>> curl.setopt(pycurl.NOPROGRESS,0)
    ###指定HTTP重定向最大次数###
    >>> curl.setopt(pycurl.MAXREDIRS,5)
    ###完成交互后强制断开连接,不重用###
    >>> curl.setopt(pycurl.FORBID_REUSE,1)
    ###设置DNS信息保存时间,默认为120秒###
    >>> curl.setopt(pycurl.DNS_CACHE_TIMEOUT,60)
    ###设置HTTP的User-Agent(自行设置时需跟着常规标准走)###
    >>> curl.setopt(pycurl.USERAGENT,"www.ipython.me")
    ###设置请求的Url###
    >>> curl.setopt(pycurl.URL,"http://www.ipython.me")
    ###将返回的HTTP HEADER定向到回调函数getheader###
    >>> curl.setopt(pycurl.HEADERFUNCTION,getheader)
    ###将返回的内容定向到回调函数getbody###
    >>> curl.setopt(pycurl.WRITEHEADERFUNCTION,getbody)
    ###将返回的HTTP HEADER定向到fileobj文件对象###
    >>> curl.setopt(pycurl.WRITEHEADER,fileobj)
    ###将返回的HTML内容定向到fileobj文件对象###
    >>> curl.setopt(pycurl.WRITEDATE,fileobj)
     
    getinfo(option):
        对应libcurl的curl_easy_getinfo方法,参数option通过libcurl的常量指定。
     
    >>> curl = pycurl.Curl()
    ###返回HTTP状态码###
    >>> curl.getinfo(pycurl.HTTP_CODE)
    ###传输结束时所消耗的总时间###
    >>> curl.getinfo(pycurl.TOTAL_TIME)
    ###DNS解析所消耗的时间###
    >>> curl.getinfo(pycurl.NAMELOOKUP_TIME)
    ###建立连接所消耗的时间###
    >>> curl.getinfo(pycurl.CONNECT_TIME)
    ###从建立连接到准备传输所消耗的时间###
    >>> curl.getinfo(pycurl.PRETRANSFER_TIME)
    ###从建立连接到数据开始传输所消耗的时间###
    >>> curl.getinfo(pycurl.STARTTRANSFER_TIME)
    ###重定向所消耗的时间###
    >>> curl.getinfo(pycurl.REDIRECT_TIME)
    ###上传数据包大小###
    >>> curl.getinfo(pycurl.SIZE_UPLOAD)
    ###下载数据包大小###
    >>> curl.getinfo(pycurl.SIZE_DOWNLOAD)
    ###平均下载速度###
    >>> curl.getinfo(pycurl.SPEED_DOWNLOAD)
    ###平均上传速度###
    >>> curl.getinfo(pycurl.SPEED_UPLOAD)
    ###HTTP头部大小###
    >>> curl.getinfo(pycurl.HEADER_SIZE)
     

    简单包装一下实现WEB探测(curl_webSev.py):

    #!/usr/bin/python
    #--coding:utf-8--#
    #-------------------------------------------------------------------------------
    # Name:        curl_webSev.py
    #
    # Author:      LiuSha
    #
    # Created:     12/15/2014
    # Copyright:   (c) WDZJ-SA 2014
    #-------------------------------------------------------------------------------
     
    def curl_webSev(URL = 'www.ipython.me'):
        _Curl = pycurl.Curl()
        _Curl.setopt(pycurl.CONNECTTIMEOUT,5)
        _Curl.setopt(pycurl.TIMEOUT,5)
        _Curl.setopt(pycurl.NOPROGRESS,1)
        _Curl.setopt(pycurl.FORBID_REUSE,1)
        _Curl.setopt(pycurl.MAXREDIRS,1)
        _Curl.setopt(pycurl.DNS_CACHE_TIMEOUT,30)
        _Curl.setopt(pycurl.URL,URL)
        try:
            with open(os.path.dirname(os.path.realpath(__file__)) + "/content.txt",'w') as outfile:
                _Curl.setopt(pycurl.WRITEHEADER,outfile)
                _Curl.setopt(pycurl.WRITEDATA,outfile)
                _Curl.perform()
        except Exception as err:
            print "exec error! %s" %err
            sys.exit()
        print "Http Code: %s" %_Curl.getinfo(_Curl.HTTP_CODE)
        print "DNS lookup time: %s ms" %(_Curl.getinfo(_Curl.NAMELOOKUP_TIME) * 1000)
        print "Create conn time: %s ms" %(_Curl.getinfo(_Curl.CONNECT_TIME) * 1000)
        print "Ready conn time: %s ms" %(_Curl.getinfo(_Curl.PRETRANSFER_TIME) * 1000)
        print "Tran Star time: %s ms" %(_Curl.getinfo(_Curl.STARTTRANSFER_TIME) * 1000)
        print "Tran Over time: %s ms" %(_Curl.getinfo(_Curl.TOTAL_TIME) * 1000)
        print "Download size: %d bytes/s" %_Curl.getinfo(_Curl.SIZE_DOWNLOAD)
        print "HTTP header size: %d byte" %_Curl.getinfo(_Curl.HEADER_SIZE)
        print "Avg download speed: %s bytes/s" %_Curl.getinfo(_Curl.SPEED_DOWNLOAD)
     
    if __name__ == '__main__':
        import os
        import sys
        import time
        import pycurl
        if sys.argv[1]:
            curl_webSev(sys.argv[1])
        else:
            curl_webSev()
     

    执行效果

    ##将域名作为参数传入##
    liushadeMacBook-Pro:Python Code LiuSha$ python curl_webSev.py http://www.ipython.me
    Http Code:      200
    DNS lookup time:        5.134 ms
    Create conn time:       50.056 ms
    Ready conn time:        50.111 ms
    Tran Star time: 142.599 ms
    Tran Over time: 364.888 ms
    Download size:  72185 bytes/s
    HTTP header size:       242 byte
    Avg download speed:     197827.0 bytes/s
     
    ##直接执行##
    liushadeMacBook-Pro:Python Code LiuSha$ python curl_webSev.py                      
    Http Code:      200
    DNS lookup time:        4.486 ms
    Create conn time:       47.92 ms
    Ready conn time:        47.984 ms
    Tran Star time: 141.122 ms
    Tran Over time: 458.379 ms
    Download size:  72185 bytes/s
    HTTP header size:       242 byte
    Avg download speed:     157478.0 bytes/s
     
    ##文件log部分内容##
    HTTP/1.1 200 OK
    Server: nginx/1.7.5
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    Date: Mon, 15 Dec 2014 15:56:14 GMT
    X-Page-Speed: 1.9.32.1-4238
    Cache-Control: max-age=0, no-cache
     
    <!DOCTYPE html>
    <!--[if IE 7]>
    <html class="ie ie7" lang="zh-CN">
    <![endif]-->
    <!--[if IE 8]>
    <html class="ie ie8" lang="zh-CN">
    <![endif]-->
    <!--[if !(IE 7) | !(IE 8)  ]><!-->
    <html lang="zh-CN">
    <!--<![endif]-->
    <head>
    <title>IT辰逸 - 热爱IT技术与互联网</title>
     
    » 转载保留版权:IT辰逸 » 《Python pycurl模块浅析》
    » 本文链接地址:http://www.ipython.me/python/python-pycurl.html
    » 本文版权采取: BY-NC-SA 协议进行授权,转载注明出处。除IT-Tools、News以及特别标注,本站所有文章均为原创。
    » 如果喜欢可以: 点此订阅本站

  • 相关阅读:
    go字面量常量
    go ssh开箱即用,注意几点
    dtle 3.x数据同步
    大厂晋升指南:材料准备,PPT 写作和现场答辩
    电商广告营销中,有哪些常见公式和优化手段?
    用Turkle库和OpenCV图像识别画一个冰墩墩
    gRPC in ASP.NET Core 3.x Protocol Buffer(3)更新消息类型 yangxu
    Rust 使用 dotenv 来设置环境变量 yangxu
    以正确的方式下载和配置 ASP.NET Core 官方源码 yangxu
    ASPOSE.Cells & ASPOSE.Words 操纵Excel和Word文档的 .NET Core 实例 yangxu
  • 原文地址:https://www.cnblogs.com/i-it/p/4181243.html
Copyright © 2020-2023  润新知