• Python pycurl


    #!/usr/bin/env python
    # -*- coding:utf-8 -*
    
    from __future__ import print_function
    import pycurl
    import re
    import sys
    try:
        from io import BytesIO
    except ImportError:
        from StringIO import StringIO as ByteIO
    
    headers = {}
    def header_function(header_line):
        header_line = header_line.decode('iso-8859-1')
        if ":" not in header_line:
            return
    
        name, value = header_line.split(":",1)
        name = name.strip()
        value = value.strip()
        name = name.lower()
        headers[name] = value
    
    URL = 'http://pycurl.sourceforge.net'
    buffer =BytesIO()
    c = pycurl.Curl()
    
    c.setopt(c.URL,URL)
    c.setopt(c.WRITEFUNCTION,buffer.write)
    c.setopt(c.HEADERFUNCTION, header_function)
    try:
        c.perform()
    except Exception,e:
        print("connection error:" + str(e))
        buffer.close()
        c.close()
        sys.exit()
    
    encoding = None
    if 'content-type' in headers:
        content_type = headers['content-type'].lower()
        match = re.search('charset=(S+)', content_type)
        if match:
            encoding = match.group(1)
            print('Decoding using %s' %encoding)
    
    if encoding is None:
        encoding = 'iso-8859-1'
        print('Assuming encoding is %s' % encoding)
    
    body = buffer.getvalue()
    HTTP_CODE = c.getinfo(c.HTTP_CODE)
    NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
    CONNECT_TIME = c.getinfo(c.CONNECT_TIME)
    PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME)
    STARTTARNSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)
    TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
    SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
    HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
    SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)
    
    print("HTTP状态码:%s" % HTTP_CODE)
    print("DNS解析时间:%.3f ms" %(NAMELOOKUP_TIME*1000))
    print("建立连接时间:%.3f ms" %(CONNECT_TIME*1000))
    print("准备传输时间:%.3f ms" %(PRETRANSFER_TIME*1000))
    print("传输开始时间:%.3f ms" %(STARTTARNSFER_TIME*1000))
    print("传输结束总时间:%.3f ms" %(TOTAL_TIME*1000))
    print("下载数据包大小:%d bytes/s" % SIZE_DOWNLOAD)
    print("HTTP头部大小:%d byte" %HEADER_SIZE)
    print("平均下载速度:%d bytes/s" % SPEED_DOWNLOAD)
    
    buffer.close()
    c.close()
  • 相关阅读:
    IEnumerator & IEnumerable
    GameObject.Active
    Unity3D的四种坐标系
    gvim
    Platform Dependent Compilation
    delegate
    new 约束
    UIPanel
    UIButton
    UISprite
  • 原文地址:https://www.cnblogs.com/jachin/p/4534678.html
Copyright © 2020-2023  润新知