Python学习笔记-实现探测Web服务质量

pycurl是一个用C语言写的libcurl Python实现,功能非常强大,支持的操作协议后FTP、HTTP、HTTPS、TELNET等,可以理解成Linux下curl命令功能的Python封装,简单易用

本例通过调用pycurl提供的方法,实现探测Web服务质量的情况,比如响应HTTP状态码、请求延时、HTTP头信息、下载速度等,利用这些信息可以定位服务响应慢的具体环节。

pycurl.Curl()类实现创建一个libcurl包的Curl句柄对象,无参数。

close()方法,对应的libcurl包中的curl_easy_cleanup方法,无参数,实现关闭、回收Curl对象。

perform()方法,对应libcurl包中的curl_easy_perform方法,无参数,实现Curl对象请求的提交。

setopt(option,value)方法,对应libcurl包中的curl_easy_setopt方法,参数option是通过libcurl的常量来指定的,参数value的值依赖option,可以是一个字符串、整型、长整型、文件对象、列表或函数等

安装pycurl模块

[[email protected] ~]# python3 -m easy_install -i http://pypi.douban.com/simple/ pycurl

报错:

setuptools.sandbox.UnpickleableException: ConfigurationError("Could not run curl-config: [Errno 2] No such file or directory: ‘curl-config‘",)

先安装libcurl-devel解决:

[[email protected] ~]# yum -y install libcurl-devel
[[email protected] ~]# python3 -m easy_install -i http://pypi.douban.com/simple/ pycurl
Finished processing dependencies for pycurl
#!/usr/bin/python3
# _*_ coding:utf-8 _*_
import sys,os
import time
import pycurl

url = "http://fm.mykurol.com"   #探测的目标URL
c = pycurl.Curl()   #创建一个Curl对象
c.setopt(pycurl.URL,url)    #定义请求的URL常量
c.setopt(pycurl.CONNECTTIMEOUT,5)   #定义请求连接的等待时间
c.setopt(pycurl.TIMEOUT,5)      #定义请求超时时间
c.setopt(pycurl.NOPROGRESS,1)       #屏蔽下载进度条
c.setopt(pycurl.FORBID_REUSE,1)     #完成交互后强制断开连接,不重用
c.setopt(pycurl.MAXREDIRS,1)        #指定HTTP重定向的最大数为1
c.setopt(pycurl.DNS_CACHE_TIMEOUT,30)       #设置保存DNS信息的时间为30秒
#创建一个文件对象,以"web"方式打开,用来存储返回的http头部及页面内容
indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")
c.setopt(pycurl.WRITEHEADER, indexfile)     #将返回的HTTP HEADER定向到indexfile文件
c.setopt(pycurl.WRITEDATA, indexfile)       #将返回的HTML内容定向到indexfile文件对象
try:
    c.perform()
except Exception as e:
    print ("connection error:"+str(e))
    indexfile.close()
    c.close()
    sys.exit()

NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)  #获取DNS解析时间
CONNECT_TIME = c.getinfo(c.CONNECT_TIME)    #获取建立连接时间
PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME)    #获取从建立连接到准备传输所消耗的时间
STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)    #获取从建立连接到传输开始消耗的时间
TOTAL_TIME = c.getinfo(c.TOTAL_TIME)    #获取传输的总时间
HTTP_CODE = c.getinfo(c.HTTP_CODE)      #获取HTTP状态码
SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)      #获取下载数据包的大小
HEADER_SIZE = c.getinfo(c.HEADER_SIZE)      #获取HTTP头部大小
SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)    #获取平均下载速度
#打印输出相关数据
print ("HTTP状态码:%s" % (HTTP_CODE))
print ("DNS解析时间:%.2f ms" % (NAMELOOKUP_TIME*1000))
print ("建立连接时间:%.2f ms" % (CONNECT_TIME*1000))
print ("准备传输时间:%.2f ms" % (PRETRANSFER_TIME*1000))
print ("传输开始时间:%.2f ms" % (STARTTRANSFER_TIME*1000))
print ("传输结束总时间:%.2f ms" % (TOTAL_TIME*1000))
print ("下载数据包大小:%d bytes/s" % (SIZE_DOWNLOAD))
print ("HTTP头部大小:%d bytes/s" % (HEADER_SIZE))
print ("平均下载速度:%d bytes/s" % (SPEED_DOWNLOAD))
#关闭文件及curl对象
indexfile.close()
c.close()

执行结果:

HTTP状态码:200
DNS解析时间:17.44 ms
建立连接时间:17.88 ms
准备传输时间:17.89 ms
传输开始时间:39.79 ms
传输结束总时间:39.88 ms
下载数据包大小:2526 bytes/s
HTTP头部大小:389 bytes/s
平均下载速度:63333 bytes/s

查看获取的HTTP文件头部及页面内容content.txt

HTTP/1.1 200 OK
Date: Fri, 09 Jun 2017 03:01:46 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Set-Cookie: PHPSESSID=qmhmq2hkbb3v5hs67rf38c5006; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 2526
Connection: close
Content-Type: text/html; charset=UTF-8
 
 
<!doctype html>
<link href="css.css" rel="stylesheet" type="text/css" />
<title>MyKurol电影推荐网</title>
<link rel="icon" href="image/logo.ico" type="img/x-ico" />
<body>
<link rel="icon" href="image/logo.ico" type="img/x-ico" />
<div class="in">
    <div class="header">
        <div class="mykurol">
            <a href="index.php" class="biaoyu"><strong>本网站由谢育政设计</strong></a>
        </div>
        <div class="key-sousuo">
            <input type="text" name="mo_key" placeholder="电影/导演/演员">
            <input type="submit" name="mo_sub" value="搜索">
        </div>
        <div class="Inlogin">
            <a href="MovEncy.php" class="movie-ency">电影大全</a>
            <a href="#" class="movie-guess">猜一猜</a>
            <a href="#" class="movie-album">电影专辑</a>
            <a href="login.php" class="login-sub">登录</a><a href="reg.php" class="reg-sub">注册</a>        </div>
    </div>
</div>
<div style="z-index:999; position:absolute; right: 20px; bottom:40%">
	<div>
    	<img src="image/1495501340.png" style="width:120px;"/>
    </div>
    <div style="padding:0; margin:0; background-color:#FFF; width:120px; height:30px">
    <a style="color:#666; font-size:12px;">友情链接:<a href="http://www.mygdmec.cn" style="text-decoration:none; color:#F9F; font-size:12px">凡梦购物网</a>
    </div>
</div>        <div class="body">
            <div class="flo">
                <div class="flo-biaoti">
                    <p href="#" class="movie-name" data-toggle="tooltip" title="《生化危机6》的详细介绍"><strong>生化危机6</strong></p>
                    <p class="movie-jieshao">
                        在华盛顿特区爱丽丝被威斯克背叛后人类几乎要失去最后的希望。作为唯一的幸存者,也是人类对抗僵尸大军的最后防线,爱丽丝必须回到噩梦开始的地方——浣熊市。在那里保护伞公司正在集结所有的力量企图对残余的幸存者发起最后的打击。<br>
                        导演:保罗·安德森<br>
                        主演:米拉·乔沃维奇 ,伊恩·格雷,艾丽·拉特,鲁比·罗丝,李准基,肖恩·罗伯茨,威廉·利维,伊恩·马肯 <br>
                        动作 / 惊悚 / 科幻
                    </p>                </div>
 
            </div>
 
        </div>
        <div class="foot">
 
        </div>
    </div>
</body>
时间: 2024-10-10 20:37:11

Python学习笔记-实现探测Web服务质量的相关文章

python学习笔记十五 web框架

python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自己处理请求 基于wsgi(Web Server Gateway Interface WEB服务网关接口,实现socket功能),自己处理请求 如图示: 自己写的web框架 #!/usr/bin/env python #coding:utf-8 import socket def handle_req

Python学习笔记七:web.py

安装pip: 到github上下载pip:https://github.com/pypa/pip 解压后,在解压出来的文件夹中打开命令行,输入 python setup.py install 安装完毕后,配置系统环境变量:在Path后,添加 python安装目录\Scripts 然后在命令行环境下,输入pip list测试是否安装成功. 最后使用pip安装模块,比如web.py: pip install web.py

VS2013中Python学习笔记[Django Web的第一个网页]

前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环境的搭建过程,以及Hello World的实现. 第二篇 VS2013中Python学习笔记[基础入门] 我简单学习使用了Python的几个基础的知识点. 第一个Web页面 第一步:首先打开VS2013开发工具 ,新建项目,选择Django Project模版. 修改项目名称,可以查看到项目的文件结

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

Python学习笔记_Chapter 7web开发

1.web应用元素 a.成员: web浏览器 web服务器 b.行为: web请求: 请求内容: 静态内容:如html文件,图像. 动态内容:需服务器运行一个程序进而做出响应. 网关接口&CGI脚本:标准化的生成动态内容的过程__网关接口,符合网关接口标准的程序__CGI脚本. web响应: 2.web应用:MVC模式 好的web应用应遵循MVC模式. Python学习笔记_Chapter 7web开发

Tornado/Python 学习笔记(一)

1.源代码下载及安装:http://www.tornadoweb.org/en/stable/ 2.python中xmlrpc库官方文档:https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc 3.xml介绍与学习:http://www.w3school.com.cn/xml/xml_intro.asp XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. HTML 旨在显示

python学习笔记(五)之字典2

python学习笔记(五)之字典2编程实战中经常用到实例1:copy >> ad = {"name":"wtf","hig":"180"}>> bd = ad>> bd{'name': 'wtf', 'hig': '180'}>> id (ad)4539954352>> id (bd)4539954352说明:一个对象贴上两个标签,使用赋值,实现了所谓的"假

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.