pycurl检测各cdn节点服务质量

import pycurl
from io import BytesIO
from urllib import parse

class cdn(object):
    def __init__(self,url):
        self.buffer = BytesIO()
        self.c = pycurl.Curl()
        self.c.setopt(pycurl.URL,url)
        #self.c.setopt(pycurl.FOLLOWLOCATION, 1) #是否开启重定向
        #self.c.setopt(pycurl.MAXREDIRS, 1) #重定向最大次数
        self.c.setopt(pycurl.WRITEFUNCTION, self.body) #将返回的内容定向到回调函数body
        self.c.setopt(pycurl.WRITEHEADER,self.buffer) #将返回的HTTP HEADER定向到buffer对象

        try:
            self.c.perform() #提交内容
        except Exception as e:
            print('connection error:' + str(e))
            self.buffer.close()
            self.c.close()

    def body(self,buf):
        data = buf

    def gethead(self):
        head = self.buffer.getvalue()
        #print(head)
        self.buffer.close()
        self.c.close()
        return head

    def getinfo(self,url):
        host,port = self.url_parse(url)
        h1 = self.c.getinfo(pycurl.HTTP_CODE)  # 状态码
        h2 = self.c.getinfo(pycurl.TOTAL_TIME)  # 传输结束总消耗时间
        h3 = self.c.getinfo(pycurl.NAMELOOKUP_TIME)  # DNS解析时间
        h4 = self.c.getinfo(pycurl.CONNECT_TIME)  # 建立连接时间
        h5 = self.c.getinfo(pycurl.PRETRANSFER_TIME)  # 建立连接到准备传输消耗时间
        h6 = self.c.getinfo(pycurl.STARTTRANSFER_TIME)  # 从建立连接到传输开始消耗时间
        h7 = self.c.getinfo(pycurl.REDIRECT_TIME)  # 重定向消耗时间
        h8 = self.c.getinfo(pycurl.SIZE_UPLOAD)  # 上传数据包大小
        h9 = self.c.getinfo(pycurl.SIZE_DOWNLOAD)  # 下载数据包大小
        h10 = self.c.getinfo(pycurl.SPEED_DOWNLOAD)  # 平均下载速度
        h11 = self.c.getinfo(pycurl.SPEED_UPLOAD)  # 平均上传速度
        h12 = self.c.getinfo(pycurl.HEADER_SIZE)  # http头文件大小
        #h13 = self.c.getinfo(pycurl.EFFECTIVE_URL) #重定向url
        #h14 = self.c.getinfo(pycurl.REDIRECT_COUNT) #重定向次数
        info ='''
            请求 %s:%s 响应信息如下:
            http状态码:%s
            传输结束总时间:%.2f ms
            DNS解析时间:%.2f ms
            建立连接时间:%.2f ms
            准备传输时间:%.2f ms
            传输开始时间:%.2f ms
            重定向时间:%.2f ms
            上传数据包大小:%d bytes/s
            下载数据包大小:%d bytes/s
            平均下载速度:%d bytes/s
            平均上传速度:%d bytes/s
            http头文件大小:%d byte
        ''' %(host,port,h1,h2*1000,h3*1000,h4*1000,h5*1000,h6*1000,h7*1000,h8,h9,h10,h11,h12)
        #print(info)
        #self.buffer.close()
        #self.c.close()
        return info

    def url_parse(self,url):
         host = parse.urlparse(url).hostname
         port = parse.urlparse(url).port
         #print(port)
         return host,port

    def get_url(self):
        url = ''
        res = self.gethead()
        head = res.decode("utf-8").split("\r\n")
        for i in head:
            if 'Location' in i:
                #print(i.split()[1])
                url = i.split()[1]
        return url

if __name__ == '__main__':
    url = ""
   
    while url != '':
        respon = cdn(url)
        info = respon.getinfo(url)
        hostname = respon.url_parse(url)
        url = respon.get_url()
        print(info)

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值