Python中pycurl模块详细用法介绍是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1148个文字,预计阅读时间需要5分钟。
文章目录
1.介绍
2.安装
3.类与方法
4.搜索Web服务质量
1. 介绍 pycurl是功能强大的Python URL库,用C语言编写,速度快,比urllib和httplib都快。支持“
文章目录
- 1. 介绍
- 2. 安装
- 3. 类与方法
- 4. 探索web服务质量
1. 介绍
pycurl是功能强大的python的url库,是用c语言写的,速度很快,比urllib和curl.haxx.se/download/curl-7.61.0.tar.gz
tar -zxvf curl-7.61.0.tar.gz
cd curl-7.61.0/
./configure
make && make install
export LD_LIBRARY_PATH=/usr/local/lib
3. 类与方法
- close()方法:对应libcurl包中的curl_easy_cleanup方法,无参数,实现关闭,回收,curl对象。
- perform()方法:对应lib包中的curl_easy_perform方法,无参数,实现curl对象请求的提交。
- setopt(option,value)方法,对应libcurl包中的curl_easy_setopt方法,参数option是通过libcurl的常量来指定的,参数value的值会依赖option,可以是一个字符串、整型,长整型,文件对象,列表或函数等。
c.setopt(pycurl.CONNECTTIMEOUT, 5) #连接的等待时间,设置为0则不等待
c.setopt(pycurl.TIMEOUT, 5) #请求超时时间
c.setopt(pycurl.NOPROGRESS, 0) #是否屏蔽下载进度条,非0则屏蔽
c.setopt(pycurl.MAXREDIRS, 5) #指定HTTP重定向的最大数
c.setopt(pycurl.FORBID_REUSE, 1) #完成交互后强制断开连接,不重用
c.setopt(pycurl.FRESH_CONNECT,1) #强制获取新的连接,即替代缓存中的连接
c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) #设置保存DNS信息的时间,默认为120秒
c.setopt(pycurl.URL,"www.baidu.com") #指定请求的URL
c.setopt(pycurl.USERAGENT,"Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)") #配置请求HTTP头的User-Agent
c.setopt(pycurl.HEADERFUNCTION, getheader) #将返回的HTTP HEADER定向到回调函数getheader
c.setopt(pycurl.WRITEFUNCTION, getbody) #将返回的内容定向到回调函数getbody
c.setopt(pycurl.WRITEHEADER, fileobj) #将返回的HTTP HEADER定向到fileobj文件对象
c.setopt(pycurl.WRITEDATA, fileobj) #将返回的HTML内容定向到fileobj文件对象
- getinfo(option)方法:对应libcurl包中的curl_easy_getinfo方法,参数option是通过libcurl的常量来指定的。
c.getinfo(pycurl.HTTP_CODE) #返回的HTTP状态码
c.getinfo(pycurl.TOTAL_TIME) #传输结束所消耗的总时间
c.getinfo(pycurl.NAMELOOKUP_TIME) #DNS解析所消耗的时间
c.getinfo(pycurl.CONNECT_TIME) #建立连接所消耗的时间
c.getinfo(pycurl.PRETRANSFER_TIME) #从建立连接到准备传输所消耗的时间
c.getinfo(pycurl.STARTTRANSFER_TIME) #从建立连接到传输开始消耗的时间
c.getinfo(pycurl.REDIRECT_TIME) #重定向所消耗的时间
c.getinfo(pycurl.SIZE_UPLOAD) #上传数据包大小
c.getinfo(pycurl.SIZE_DOWNLOAD) #下载数据包大小
c.getinfo(pycurl.SPEED_DOWNLOAD) #平均下载速度
c.getinfo(pycurl.SPEED_UPLOAD) #平均上传速度
c.getinfo(pycurl.HEADER_SIZE) #HTTP头部大小
4. 探索web服务质量
HTTP服务是最流行的互联网应用之一,服务质量的好坏关系到用户体验以及网站的运营服务水平,最常用的有两个标准:
- 一为服务的可用性,比如是否处于正常提供服务状态,而不是出现404页面或500页面错误等;
- 二是服务响应的速度,比如静态类文件下载时间都控制在毫秒级,动态CGI为秒级。
本实例使用pycurl的setopt与getinfo方法时间HTTP服务质量的探测,获取监控URL返回的HTTP状态码,HTTP状态码采用pycurl.HTTP_CODE常量,以及从HTTP请求到下载期间各环节的响应时间,通过pycurl.NAMELOOKUP_TIME、pycurl.CONNECT_TIME、pycurl.PRETRANSFER_TIME、pycurl.R等常量来时间。另外通过pycurl.WRITEHEADER、pycurl.WRITEDATA常量得到目标URL的HTTP响应头部及页面内容.
第一种方法:
# -*- coding:UTF-8 -*-
import os, sys
import time
import pycurl
#探测的目标URL
URL= "www.baidu.com"
#创建一个Curl对象
c = pycurl.Curl()
#定义请求的URL常量
c.setopt(pycurl.URL, URL)
#定义请求连接的等待时间
c.setopt(pycurl.CONNECTTIMEOUT, 5)
#定义请求超时时间
c.setopt(pycurl.TIMEOUT, 5)
#屏蔽下载进度条
c.setopt(pycurl.NOPROGRESS, 1)
#完成交互后强制断开连接,不重用
c.setopt(pycurl.FORBID_REUSE, 1)
#指定HTTP重定向的最大数为1
c.setopt(pycurl.MAXREDIRS, 1)
#设置保存DNS信息的时间为30秒
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)
#创建一个文件对象,以“wb”方式打开,用来存储返回的baidu.com
Connection error:(52, 'Empty reply from server')
[root@localhost pycurl]# python pycurl2.py
请输入一个URL地址(Q for exit):www.baidu.com
传输总时间 : 306.28 ms
建立连接到传输开始消耗的时间 : 168.19 ms
平均下载速度 : 679439 bytes/s
建立到准备传输所消耗的时间 : 107.48 ms
下载数据包大小 : 208096 bytes/s
DNS解析时间 : 63.36 ms
建立连接时间 : 107.29 ms
HTTP头部大小 : 1209 bytes/s
HTTP状态码 : 200
请输入一个URL地址(Q for exit):
参考连接:
www.jianshu.com/p/862db80e992e《python运维自动化与实践刘天斯》
本文共计1148个文字,预计阅读时间需要5分钟。
文章目录
1.介绍
2.安装
3.类与方法
4.搜索Web服务质量
1. 介绍 pycurl是功能强大的Python URL库,用C语言编写,速度快,比urllib和httplib都快。支持“
文章目录
- 1. 介绍
- 2. 安装
- 3. 类与方法
- 4. 探索web服务质量
1. 介绍
pycurl是功能强大的python的url库,是用c语言写的,速度很快,比urllib和curl.haxx.se/download/curl-7.61.0.tar.gz
tar -zxvf curl-7.61.0.tar.gz
cd curl-7.61.0/
./configure
make && make install
export LD_LIBRARY_PATH=/usr/local/lib
3. 类与方法
- close()方法:对应libcurl包中的curl_easy_cleanup方法,无参数,实现关闭,回收,curl对象。
- perform()方法:对应lib包中的curl_easy_perform方法,无参数,实现curl对象请求的提交。
- setopt(option,value)方法,对应libcurl包中的curl_easy_setopt方法,参数option是通过libcurl的常量来指定的,参数value的值会依赖option,可以是一个字符串、整型,长整型,文件对象,列表或函数等。
c.setopt(pycurl.CONNECTTIMEOUT, 5) #连接的等待时间,设置为0则不等待
c.setopt(pycurl.TIMEOUT, 5) #请求超时时间
c.setopt(pycurl.NOPROGRESS, 0) #是否屏蔽下载进度条,非0则屏蔽
c.setopt(pycurl.MAXREDIRS, 5) #指定HTTP重定向的最大数
c.setopt(pycurl.FORBID_REUSE, 1) #完成交互后强制断开连接,不重用
c.setopt(pycurl.FRESH_CONNECT,1) #强制获取新的连接,即替代缓存中的连接
c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) #设置保存DNS信息的时间,默认为120秒
c.setopt(pycurl.URL,"www.baidu.com") #指定请求的URL
c.setopt(pycurl.USERAGENT,"Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)") #配置请求HTTP头的User-Agent
c.setopt(pycurl.HEADERFUNCTION, getheader) #将返回的HTTP HEADER定向到回调函数getheader
c.setopt(pycurl.WRITEFUNCTION, getbody) #将返回的内容定向到回调函数getbody
c.setopt(pycurl.WRITEHEADER, fileobj) #将返回的HTTP HEADER定向到fileobj文件对象
c.setopt(pycurl.WRITEDATA, fileobj) #将返回的HTML内容定向到fileobj文件对象
- getinfo(option)方法:对应libcurl包中的curl_easy_getinfo方法,参数option是通过libcurl的常量来指定的。
c.getinfo(pycurl.HTTP_CODE) #返回的HTTP状态码
c.getinfo(pycurl.TOTAL_TIME) #传输结束所消耗的总时间
c.getinfo(pycurl.NAMELOOKUP_TIME) #DNS解析所消耗的时间
c.getinfo(pycurl.CONNECT_TIME) #建立连接所消耗的时间
c.getinfo(pycurl.PRETRANSFER_TIME) #从建立连接到准备传输所消耗的时间
c.getinfo(pycurl.STARTTRANSFER_TIME) #从建立连接到传输开始消耗的时间
c.getinfo(pycurl.REDIRECT_TIME) #重定向所消耗的时间
c.getinfo(pycurl.SIZE_UPLOAD) #上传数据包大小
c.getinfo(pycurl.SIZE_DOWNLOAD) #下载数据包大小
c.getinfo(pycurl.SPEED_DOWNLOAD) #平均下载速度
c.getinfo(pycurl.SPEED_UPLOAD) #平均上传速度
c.getinfo(pycurl.HEADER_SIZE) #HTTP头部大小
4. 探索web服务质量
HTTP服务是最流行的互联网应用之一,服务质量的好坏关系到用户体验以及网站的运营服务水平,最常用的有两个标准:
- 一为服务的可用性,比如是否处于正常提供服务状态,而不是出现404页面或500页面错误等;
- 二是服务响应的速度,比如静态类文件下载时间都控制在毫秒级,动态CGI为秒级。
本实例使用pycurl的setopt与getinfo方法时间HTTP服务质量的探测,获取监控URL返回的HTTP状态码,HTTP状态码采用pycurl.HTTP_CODE常量,以及从HTTP请求到下载期间各环节的响应时间,通过pycurl.NAMELOOKUP_TIME、pycurl.CONNECT_TIME、pycurl.PRETRANSFER_TIME、pycurl.R等常量来时间。另外通过pycurl.WRITEHEADER、pycurl.WRITEDATA常量得到目标URL的HTTP响应头部及页面内容.
第一种方法:
# -*- coding:UTF-8 -*-
import os, sys
import time
import pycurl
#探测的目标URL
URL= "www.baidu.com"
#创建一个Curl对象
c = pycurl.Curl()
#定义请求的URL常量
c.setopt(pycurl.URL, URL)
#定义请求连接的等待时间
c.setopt(pycurl.CONNECTTIMEOUT, 5)
#定义请求超时时间
c.setopt(pycurl.TIMEOUT, 5)
#屏蔽下载进度条
c.setopt(pycurl.NOPROGRESS, 1)
#完成交互后强制断开连接,不重用
c.setopt(pycurl.FORBID_REUSE, 1)
#指定HTTP重定向的最大数为1
c.setopt(pycurl.MAXREDIRS, 1)
#设置保存DNS信息的时间为30秒
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)
#创建一个文件对象,以“wb”方式打开,用来存储返回的baidu.com
Connection error:(52, 'Empty reply from server')
[root@localhost pycurl]# python pycurl2.py
请输入一个URL地址(Q for exit):www.baidu.com
传输总时间 : 306.28 ms
建立连接到传输开始消耗的时间 : 168.19 ms
平均下载速度 : 679439 bytes/s
建立到准备传输所消耗的时间 : 107.48 ms
下载数据包大小 : 208096 bytes/s
DNS解析时间 : 63.36 ms
建立连接时间 : 107.29 ms
HTTP头部大小 : 1209 bytes/s
HTTP状态码 : 200
请输入一个URL地址(Q for exit):
参考连接:
www.jianshu.com/p/862db80e992e《python运维自动化与实践刘天斯》

