当前位置: 首页 > 工具软件 > PycURL > 使用案例 >

python curl模块_Python 的PyCurl模块使用

周浩淼
2023-12-01

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

IT辰逸 - 热爱IT技术与互联网

» 转载保留版权:IT辰逸 » 《Python pycurl模块浅析》

» 本文链接地址:http://www.ipython.me/python/python-pycurl.html

» 本文版权采取: BY-NC-SA 协议进行授权,转载注明出处。除IT-Tools、News以及特别标注,本站所有文章均为原创。

» 如果喜欢可以: 点此订阅本站

 类似资料: