Python 的PyCurl模块使用
PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。它的功能很强大,PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。如果你需要些简单或纯 Python 的模块,你可以参考一下 urllib2 或 urlgrabber 。
Project Address:
http://pycurl.sourceforge.net/
Pypi:
https://pypi.python.org/pypi/pycurl
Github:
https://github.com/pycurl/pycurl
pip install:
liushadeMacBook-Pro:~ LiuSha$ sudo pip install pycurl
pycurl常用方法
##pycurl.Curl()类实现一个ibcurl包的Curl句柄对象,Curl对象常用的方法如下##
close():
对应libcurl包中curl_easy_cleanup方法,无参数,实现关闭回收Curl对象。
perform():
对应libcurl包中curl_easy_perform方法,无参数,实现Curl对象请求的提交。
setopt(option,value):
对应libcurl包中curl_easy_setopt方法,参数option通过libcurl的常量来定义,参数value的值会依赖option,可以是一个字符串、整形、长整形、文件对象、列表、函数等。
###模块导入###
>>> import pycurl
###创建curl对象###
>>> curl = pycurl.Curl()
###连接等待时间,0则不等待###
>>> curl.setopt(pycurl.CONNECTTIMEOUT,5)
###超时时间###
>>> curl.setopt(pycurl.TIMEOUT,5)
###下载进度条,非0则屏蔽###
>>> curl.setopt(pycurl.NOPROGRESS,0)
###指定HTTP重定向最大次数###
>>> curl.setopt(pycurl.MAXREDIRS,5)
###完成交互后强制断开连接,不重用###
>>> curl.setopt(pycurl.FORBID_REUSE,1)
###设置DNS信息保存时间,默认为120秒###
>>> curl.setopt(pycurl.DNS_CACHE_TIMEOUT,60)
###设置HTTP的User-Agent(自行设置时需跟着常规标准走)###
>>> curl.setopt(pycurl.USERAGENT,"www.ipython.me")
###设置请求的Url###
>>> curl.setopt(pycurl.URL,"http://www.ipython.me")
###将返回的HTTP HEADER定向到回调函数getheader###
>>> curl.setopt(pycurl.HEADERFUNCTION,getheader)
###将返回的内容定向到回调函数getbody###
>>> curl.setopt(pycurl.WRITEHEADERFUNCTION,getbody)
###将返回的HTTP HEADER定向到fileobj文件对象###
>>> curl.setopt(pycurl.WRITEHEADER,fileobj)
###将返回的HTML内容定向到fileobj文件对象###
>>> curl.setopt(pycurl.WRITEDATE,fileobj)
getinfo(option):
对应libcurl的curl_easy_getinfo方法,参数option通过libcurl的常量指定。
>>> curl = pycurl.Curl()
###返回HTTP状态码###
>>> curl.getinfo(pycurl.HTTP_CODE)
###传输结束时所消耗的总时间###
>>> curl.getinfo(pycurl.TOTAL_TIME)
###DNS解析所消耗的时间###
>>> curl.getinfo(pycurl.NAMELOOKUP_TIME)
###建立连接所消耗的时间###
>>> curl.getinfo(pycurl.CONNECT_TIME)
###从建立连接到准备传输所消耗的时间###
>>> curl.getinfo(pycurl.PRETRANSFER_TIME)
###从建立连接到数据开始传输所消耗的时间###
>>> curl.getinfo(pycurl.STARTTRANSFER_TIME)
###重定向所消耗的时间###
>>> curl.getinfo(pycurl.REDIRECT_TIME)
###上传数据包大小###
>>> curl.getinfo(pycurl.SIZE_UPLOAD)
###下载数据包大小###
>>> curl.getinfo(pycurl.SIZE_DOWNLOAD)
###平均下载速度###
>>> curl.getinfo(pycurl.SPEED_DOWNLOAD)
###平均上传速度###
>>> curl.getinfo(pycurl.SPEED_UPLOAD)
###HTTP头部大小###
>>> curl.getinfo(pycurl.HEADER_SIZE)
简单包装一下实现WEB探测(curl_webSev.py):
#!/usr/bin/python
#--coding:utf-8--#
#-------------------------------------------------------------------------------
# Name: curl_webSev.py
#
# Author: LiuSha
#
# Created: 12/15/2014
# Copyright: (c) WDZJ-SA 2014
#-------------------------------------------------------------------------------
def curl_webSev(URL = 'www.ipython.me'):
_Curl = pycurl.Curl()
_Curl.setopt(pycurl.CONNECTTIMEOUT,5)
_Curl.setopt(pycurl.TIMEOUT,5)
_Curl.setopt(pycurl.NOPROGRESS,1)
_Curl.setopt(pycurl.FORBID_REUSE,1)
_Curl.setopt(pycurl.MAXREDIRS,1)
_Curl.setopt(pycurl.DNS_CACHE_TIMEOUT,30)
_Curl.setopt(pycurl.URL,URL)
try:
with open(os.path.dirname(os.path.realpath(__file__)) + "/content.txt",'w') as outfile:
_Curl.setopt(pycurl.WRITEHEADER,outfile)
_Curl.setopt(pycurl.WRITEDATA,outfile)
_Curl.perform()
except Exception as err:
print "exec error!\n\t%s" %err
sys.exit()
print "Http Code:\t%s" %_Curl.getinfo(_Curl.HTTP_CODE)
print "DNS lookup time:\t%s ms" %(_Curl.getinfo(_Curl.NAMELOOKUP_TIME) * 1000)
print "Create conn time:\t%s ms" %(_Curl.getinfo(_Curl.CONNECT_TIME) * 1000)
print "Ready conn time:\t%s ms" %(_Curl.getinfo(_Curl.PRETRANSFER_TIME) * 1000)
print "Tran Star time:\t%s ms" %(_Curl.getinfo(_Curl.STARTTRANSFER_TIME) * 1000)
print "Tran Over time:\t%s ms" %(_Curl.getinfo(_Curl.TOTAL_TIME) * 1000)
print "Download size:\t%d bytes/s" %_Curl.getinfo(_Curl.SIZE_DOWNLOAD)
print "HTTP header size:\t%d byte" %_Curl.getinfo(_Curl.HEADER_SIZE)
print "Avg download speed:\t%s bytes/s" %_Curl.getinfo(_Curl.SPEED_DOWNLOAD)
if __name__ == '__main__':
import os
import sys
import time
import pycurl
if sys.argv[1]:
curl_webSev(sys.argv[1])
else:
curl_webSev()
执行效果
##将域名作为参数传入##
liushadeMacBook-Pro:Python Code LiuSha$ python curl_webSev.py http://www.ipython.me
Http Code: 200
DNS lookup time: 5.134 ms
Create conn time: 50.056 ms
Ready conn time: 50.111 ms
Tran Star time: 142.599 ms
Tran Over time: 364.888 ms
Download size: 72185 bytes/s
HTTP header size: 242 byte
Avg download speed: 197827.0 bytes/s
##直接执行##
liushadeMacBook-Pro:Python Code LiuSha$ python curl_webSev.py
Http Code: 200
DNS lookup time: 4.486 ms
Create conn time: 47.92 ms
Ready conn time: 47.984 ms
Tran Star time: 141.122 ms
Tran Over time: 458.379 ms
Download size: 72185 bytes/s
HTTP header size: 242 byte
Avg download speed: 157478.0 bytes/s
##文件log部分内容##
HTTP/1.1 200 OK
Server: nginx/1.7.5
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Date: Mon, 15 Dec 2014 15:56:14 GMT
X-Page-Speed: 1.9.32.1-4238
Cache-Control: max-age=0, no-cache
<!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" lang="zh-CN">
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" lang="zh-CN">
<![endif]-->
<!--[if !(IE 7) | !(IE 8) ]><!-->
<html lang="zh-CN">
<!--<![endif]-->
<head>
<title>IT辰逸 - 热爱IT技术与互联网</title>
» 转载保留版权:IT辰逸 » 《Python pycurl模块浅析》
» 本文链接地址:http://www.ipython.me/python/python-pycurl.html
» 本文版权采取: BY-NC-SA 协议进行授权,转载注明出处。除IT-Tools、News以及特别标注,本站所有文章均为原创。
» 如果喜欢可以: 点此订阅本站
Python 的PyCurl模块使用的更多相关文章
- python关于SSL的认证--pycurl模块使用
今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.cs ...
- http服务需要pycurl模块这样去监控服务
最近运维还是比较空闲,写篇自己的心得体会.做过运维的应该都做过http服务了.像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去 ...
- python的库有多少个?python有多少个模块?
这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...
- python之platform模块
python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)
一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...
- linux下python调用c模块
在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明: (1)编写C代码,hel ...
- Python学习之模块进程函数详解
今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...
随机推荐
- hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离. 只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了. 这里有个坑,比如: 1 ...
- android面试题 不仅仅是面试是一个很好的学习
下面的问题是在网上找到的总结,感谢您分享!希望,我们的共同进步,找到自己心仪的公司,: 1.android dvm 流程和Linux这个过程.无论是应用程序对同一概念: 答案:dvm是dalivk虚拟 ...
- 设置 Linux 的 LD_LIBRARY_PATH 变量
源地址:http://www.cnblogs.com/trying/archive/2013/06/07/3123577.html 我们在ubuntu图形界面下用eclipse写了一个动态库,到cen ...
- 模仿《百度音乐HD》添加到下载框动画
上次听有人说喜欢<百度音乐HD>添加到下载动画 ,我就尝试模仿了下,没想到,今天code4app(地址)也有了这个,但是 这个动画基本相同,我们的思路还是部一样的. 都可以参考 .主要关键 ...
- ios王云鹤--iPhone中,点击换行,键盘消失。
1.要在声明文件中实现 UItextFieldDelegate 协议 2.在实现文件中实现 UItextFieldDelegate 协议 中键盘消失的方法即: -(BOOL)textFieldShou ...
- Android显示GIF图片
今天我们研究一下怎样在Android手机上显示GIF动态图片 首先须要在src文件夹下新建一个自己定义的View.代码例如以下: </pre><pre name="code ...
- [IDEs]Eclipse自动格式化代码
格式化代码快捷键:Ctrl + Shift + F 一般情况: 1).Ctrl + A 2).Ctrl + Shift + F ps: 格式化之后发现代码换行了,因为已经达到最大长度,可修改设置,增加 ...
- GMM的EM算法
在聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明 ...
- nagios二次开发(五岁以下儿童)---nagios和nagiosql关系
基于nagios和nagiosql理解.这将是这两个梳理比较粗糙的简单关系,有关详细信息,请参阅下面的图如: 从上面的关系图中能够看出,nagios与nagiosql共享了主机.主机组.服务 ...
- jQuery中常用的函数方法
jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...