python pycurl模块
一、pycurl概述
PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。它的功能很强大,在PyCURL的主页上介绍的支持的功能有:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more!
由于PycURl 是由C语言原生实现的,所以一般来说会比其会比纯python实现的liburl、liburl2模块快不少,可能也会比Requests的效率更高。特别是使用PycURL的多并发请求时,效率更高。
二、pycurl 的用法
示例1:
以下是一个通过get方法获取大众点评杭州站页面的请求时间统计和字符统计的一个用法,也可以将结果显示,只需要将最后一行的打开即可。
1#! /usr/bin/env python
2# -*- coding: utf-8 -*-
3import sys
4import pycurl
5import time
6class Test:
7 def __init__(self):
8 self.contents = ''
9 def body_callback(self, buf):
10 self.contents = self.contents + buf
11sys.stderr.write("Testing %sn" % pycurl.version)
12start_time = time.time()
13url = 'http://www.dianping.com/hangzhou'
14t = Test()
15c = pycurl.Curl()
16c.setopt(c.URL, url)
17c.setopt(c.WRITEFUNCTION, t.body_callback)
18c.perform()
19end_time = time.time()
20duration = end_time - start_time
21print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL)
22c.close()
23print 'pycurl takes %s seconds to get %s ' % (duration, url)
24print 'lenth of the content is %d' % len(t.contents)
25#print(t.contents)
示例2
很多站点需要通过cookie识别,这里封装了三个函数,函数1是对cookile进行自动处理的函数,函数2是定主一个get方法,函数3定义一个post方法:
1import pycurl
2import StringIO
3import urllib
4#------------------------自动处理cookile的函数----------------------------------#
5def initCurl():
6'''初始化一个pycurl对象,
7尽管urllib2也支持 cookie 但是在登录cas系统时总是失败,并且没有搞清楚失败的原因。
8这里采用pycurl主要是因为pycurl设置了cookie后,可以正常登录Cas系统
9'''
10 c = pycurl.Curl()
11 c.setopt(pycurl.COOKIEFILE, "cookie_file_name")#把cookie保存在该文件中
12 c.setopt(pycurl.COOKIEJAR, "cookie_file_name")
13 c.setopt(pycurl.FOLLOWLOCATION, 1) #允许跟踪来源
14 c.setopt(pycurl.MAXREDIRS, 5)
15 #设置代理 如果有需要请去掉注释,并设置合适的参数
16 #c.setopt(pycurl.PROXY, ‘http://11.11.11.11:8080′)
17 #c.setopt(pycurl.PROXYUSERPWD, ‘aaa:aaa’)
18 return c
19#-----------------------------------get函数-----------------------------------#
20def GetDate(curl, url):
21'''获得url指定的资源,这里采用了HTTP的GET方法
22'''
23 head = ['Accept:*/*',
24 'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0']
25 buf = StringIO.StringIO()
26 curl.setopt(pycurl.WRITEFUNCTION, buf.write)
27 curl.setopt(pycurl.URL, url)
28 curl.setopt(pycurl.HTTPHEADER, head)
29 curl.perform()
30 the_page =buf.getvalue()
31 buf.close()
32 return the_page
33#-----------------------------------post函数-----------------------------------#
34def PostData(curl, url, data):
35'''提交数据到url,这里使用了HTTP的POST方法
36备注,这里提交的数据为json数据,
37如果需要修改数据类型,请修改head中的数据类型声明
38'''
39 head = ['Accept:*/*',
40 'Content-Type:application/xml',
41 'render:json',
42 'clientType:json',
43 'Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3',
44 'Accept-Encoding:gzip,deflate,sdch',
45 'Accept-Language:zh-CN,zh;q=0.8',
46 'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0']
47 buf = StringIO.StringIO()
48 curl.setopt(pycurl.WRITEFUNCTION, buf.write)
49 curl.setopt(pycurl.POSTFIELDS, data)
50 curl.setopt(pycurl.URL, url)
51 curl.setopt(pycurl.HTTPHEADER, head)
52 curl.perform()
53 the_page = buf.getvalue()
54 #print the_page
55 buf.close()
56 return the_page
57#-----------------------------------post函数-----------------------------------#
58c = initCurl()
59html = GetDate(c, 'http://www.baidu.com')
60print html
示例3:
这是一个将短链接转化为实际的url地址的示例
1import StringIO
2import pycurl
3c = pycurl.Curl()
4str = StringIO.StringIO()
5c.setopt(pycurl.URL, "http://t.cn/Rhevig4")
6c.setopt(pycurl.WRITEFUNCTION, str.write)
7c.setopt(pycurl.FOLLOWLOCATION, 1)
8c.perform()
9print c.getinfo(pycurl.EFFECTIVE_URL)
本例执行后短链接转换的结果就是本站的地址:www.361way.com
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-pycurl/3856.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.