pycurl模块是c语言写的libcurl的python绑定库。
libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。
它的功能很强大,python pycurl模块非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。
如果需要简单或纯python模块,请参考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.plcxue.com")
###设置请求的Url###
>>> curl.setopt(pycurl.URL,"http://www.plcxue.com")
###将返回的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.plcxue.com'):
_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!nt%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()
执行结果:
##将
域名作为参数传入##
$ python curl_webSev.py http://www.plcxue.com
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>
脚本学堂 - www.jb200.com</title>