Python中的CURL PycURL使用例子
程序员文章站
2023-11-16 13:05:22
在linux上有个常用的命令 curl(非常好用),支持curl的就是大名鼎鼎的libcurl库;libcurl是功能强大的,而且是非常高效的函数库。libcurl除了提供...
在linux上有个常用的命令 curl(非常好用),支持curl的就是大名鼎鼎的libcurl库;libcurl是功能强大的,而且是非常高效的函数库。libcurl除了提供本身的c api之外,还有多达40种编程语言的binding,这里介绍的pycurl就是libcurl的python binding。
在python中对网页进行get/post等请求,当需要考虑高性能的时候,libcurl是非常不错的选择,一般来说会比liburl、liburl2快不少,可能也会比requests的效率更高。特别是使用pycurl的多并发请求时,更是效率很高的。个人感觉,其唯一的缺点是,由于是直接调用的是libcurl c库,pycurl的函数接口之类的还和c中的东西很像,可能不是那么的pythonic,写代码的学习曲线稍微比liburl高一点儿。
还是看个简单的例子吧:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
created on dec 15, 2013
@author: jay
'''
import sys
import pycurl
import time
class test:
def __init__(self):
self.contents = ''
def body_callback(self, buf):
self.contents = self.contents + buf
sys.stderr.write("testing %s\n" % pycurl.version)
start_time = time.time()
url = 'http://www.dianping.com/shanghai'
t = test()
c = pycurl.curl()
c.setopt(c.url, url)
c.setopt(c.writefunction, t.body_callback)
c.perform()
end_time = time.time()
duration = end_time - start_time
print c.getinfo(pycurl.http_code), c.getinfo(pycurl.effective_url)
c.close()
print 'pycurl takes %s seconds to get %s ' % (duration, url)
print 'lenth of the content is %d' % len(t.contents)
#print(t.contents)
在python中对网页进行get/post等请求,当需要考虑高性能的时候,libcurl是非常不错的选择,一般来说会比liburl、liburl2快不少,可能也会比requests的效率更高。特别是使用pycurl的多并发请求时,更是效率很高的。个人感觉,其唯一的缺点是,由于是直接调用的是libcurl c库,pycurl的函数接口之类的还和c中的东西很像,可能不是那么的pythonic,写代码的学习曲线稍微比liburl高一点儿。
还是看个简单的例子吧:
复制代码 代码如下:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
created on dec 15, 2013
@author: jay
'''
import sys
import pycurl
import time
class test:
def __init__(self):
self.contents = ''
def body_callback(self, buf):
self.contents = self.contents + buf
sys.stderr.write("testing %s\n" % pycurl.version)
start_time = time.time()
url = 'http://www.dianping.com/shanghai'
t = test()
c = pycurl.curl()
c.setopt(c.url, url)
c.setopt(c.writefunction, t.body_callback)
c.perform()
end_time = time.time()
duration = end_time - start_time
print c.getinfo(pycurl.http_code), c.getinfo(pycurl.effective_url)
c.close()
print 'pycurl takes %s seconds to get %s ' % (duration, url)
print 'lenth of the content is %d' % len(t.contents)
#print(t.contents)