python Pycurl 库 ——

发布时间:2019-09-12 07:55:10编辑:auto阅读(2010)

        经常使用基调网络的同学,可能对基调网络对页面元素的性能展示感觉很好。它可以做到对一条URL做详细的检测,包括:阻塞时间、DNS解析时间、建立连接时间、SSL握手时间、发出请求时间、首包时间等。

        wKiom1Psec_iceBrAAGpCF7Ygqw296.jpg

        其实,我们也可以做到。比如Python pycurl 库就可以做到对数据的收集,然后可以对收集的数据写入redis或者Mysql。最后前端使用echars通过图形的形式进行展示出来。

        

    wKioL1PsfN7Dk1JqAAGGmOAYRYc068.jpg

    wKiom1Pse8bg6o5mAADIBgSmR6g461.jpg

        echars是百度一个开源项目,功能很强大(项目URL:http://echarts.baidu.com)可以将数据通过各种图形的形式展现出来。

        

    使用Pycurl 监测指定站点相关系能

        Pycurl是个用C语言实现的python库,Pycurl可以用来获取指定URL的响应对象。它支持的协议很多,如:FTP、FTPS、HTTP、HTTPS、TELNET等。

        可以使用Pycurl库编写的脚本放到不同地区的CDN节点上,通过Crond Job或者守护进程的方式,在该节点测试指定站点,然后将测试结果通过RPC或者Http方式发送到服务端写入redis或Mysql,最后通过前端页面展现出来。

    #!/usr/bin/env python
    
    import pycurl
    import sys
    import json
    
    WEB_SITES = sys.argv[1]
    
    def main():
        c = pycurl.Curl()
        c.setopt(pycurl.URL, WEB_SITES)                                #设置session
        c.setopt(pycurl.FOLLOWLOCATION, 1)
        content = c.perform()                                           #执行传输动作
        dns_time = c.getinfo(pycurl.NAMELOOKUP_TIME)                    #DNS 建连时间
        conn_time = c.getinfo(pycurl.CONNECT_TIME)                      #TCP/IP 三次握手时间
        starttransfer_time = c.getinfo(pycurl.STARTTRANSFER_TIME)       #首包时间
        total_time = c.getinfo(pycurl.TOTAL_TIME)                       #上一请求的总时间
        http_code = c.getinfo(pycurl.HTTP_CODE)                         #HTTP响应代码
        redirect_count = c.getinfo(pycurl.REDIRECT_COUNT)               #重定向次数
        size_upload = c.getinfo(pycurl.SIZE_UPLOAD)                     #上传字节大小
        size_download = c.getinfo(pycurl.SIZE_DOWNLOAD)                 #下载字节大小
        header_size = c.getinfo(pycurl.HEADER_SIZE)                     #头部大小
        request_size = c.getinfo(pycurl.REQUEST_SIZE)                   #请求大小
        content_type = c.getinfo(pycurl.CONTENT_TYPE)                   #请求内容类型
        c.close()                                                      #关闭处理Curl的session
        data = json.dumps({'dns_time':dns_time,         
                          'conn_time':conn_time,        
                          'starttransfer_time':starttransfer_time,    
                          'total_time':total_time,
                          'http_code':http_code,
                          'redirect_count':redirect_count,
                          'size_upload':size_upload,
                          'size_download':size_download,
                          'header_size':header_size,
                          'request_size':request_size,
                          'content_type':content_type})
        return data
    
    if __name__ == "__main__":
        print main()

     

    该脚本执行结果如下:

           wKioL1Psg5OCHEy1AAFTfFKX0cY435.jpg    

    除了上面脚本使用的一些相应信息外,Pycurl还支持很多响应信息:

        pycurl.PRETRANSFER_TIME           #建立连接后到开始传输的时间

        pycurl.REDIRECT_TIME              #如果存在跳转,所花费的时间

        pycurl.SPEED_UPLOAD               #上传速度

        pycurl.CONTENT_LENGTH_DOWNLOAD    #下载内容长度

        pycurl.CONTENT_LENGTH_UPLOAD      #上传内容的长度

        pycurl.SPEED_DOWNLOAD             #下载速度

        pycurl.INFO_FILETIME              #文件的时间信息

        Pycurl.HTTP_CONNECTCODE           #HTTP连接代码

        

        这样,各地区Cache节点就可以跑起来了,可以通过RPC或者其他方式将获取的数据传到服务端。最后通过前端页面渲染出来就ok了。由于我们单位买了基调的服务,所以我就没有写前端的页面,如果哪位需要的话,可以搞一下。

关键字