一、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方法获取大众点评杭州站页面的请求时间统计和字符统计的一个用法,也可以将结果显示,只需要将最后一行的打开即可。

#! /usr/bin/env python

# -*- coding: utf-8 -*-

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 %sn" % pycurl.version)

start_time = time.time()

url = 'http://www.dianping.com/hangzhou'

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)

示例2

很多站点需要通过cookie识别,这里封装了三个函数,函数1是对cookile进行自动处理的函数,函数2是定主一个get方法,函数3定义一个post方法:

import pycurl

import StringIO

import urllib

#------------------------自动处理cookile的函数----------------------------------#

def initCurl():

'''初始化一个pycurl对象,

尽管urllib2也支持 cookie 但是在登录cas系统时总是失败,并且没有搞清楚失败的原因。

这里采用pycurl主要是因为pycurl设置了cookie后,可以正常登录Cas系统

'''

c = pycurl.Curl()

c.setopt(pycurl.COOKIEFILE, "cookie_file_name")#把cookie保存在该文件中

c.setopt(pycurl.COOKIEJAR, "cookie_file_name")

c.setopt(pycurl.FOLLOWLOCATION, 1) #允许跟踪来源

c.setopt(pycurl.MAXREDIRS, 5)

#设置代理 如果有需要请去掉注释,并设置合适的参数

#c.setopt(pycurl.PROXY, ‘http://11.11.11.11:8080′)

#c.setopt(pycurl.PROXYUSERPWD, ‘aaa:aaa’)

return c

#-----------------------------------get函数-----------------------------------#

def GetDate(curl, url):

'''获得url指定的资源,这里采用了HTTP的GET方法

'''

head = ['Accept:*/*',

'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0']

buf = StringIO.StringIO()

curl.setopt(pycurl.WRITEFUNCTION, buf.write)

curl.setopt(pycurl.URL, url)

curl.setopt(pycurl.HTTPHEADER, head)

curl.perform()

the_page =buf.getvalue()

buf.close()

return the_page

#-----------------------------------post函数-----------------------------------#

def PostData(curl, url, data):

'''提交数据到url,这里使用了HTTP的POST方法

备注,这里提交的数据为json数据,

如果需要修改数据类型,请修改head中的数据类型声明

'''

head = ['Accept:*/*',

'Content-Type:application/xml',

'render:json',

'clientType:json',

'Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3',

'Accept-Encoding:gzip,deflate,sdch',

'Accept-Language:zh-CN,zh;q=0.8',

'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0']

buf = StringIO.StringIO()

curl.setopt(pycurl.WRITEFUNCTION, buf.write)

curl.setopt(pycurl.POSTFIELDS, data)

curl.setopt(pycurl.URL, url)

curl.setopt(pycurl.HTTPHEADER, head)

curl.perform()

the_page = buf.getvalue()

#print the_page

buf.close()

return the_page

#-----------------------------------post函数-----------------------------------#

c = initCurl()

html = GetDate(c, 'http://www.baidu.com')

print html

示例3:

这是一个将短链接转化为实际的url地址的示例

import StringIO

import pycurl

c = pycurl.Curl()

str = StringIO.StringIO()

c.setopt(pycurl.URL, "http://t.cn/Rhevig4")

c.setopt(pycurl.WRITEFUNCTION, str.write)

c.setopt(pycurl.FOLLOWLOCATION, 1)

c.perform()

print c.getinfo(pycurl.EFFECTIVE_URL)

本例执行后短链接转换的结果就是本站的地址:www.361way.com

python curl模块_python pycurl模块相关推荐

  1. python curl模块_Python pycurl模块 学习

    pycurl模块的安装方法如下: easy_install pycurl #easy_install安装方法 pip install pycurl #pip安装方法 #源码安装方法 # 要求curl- ...

  2. python curl工具_python版本的curl工具pycurl学习

    一 pycurl介绍 pycurl模块为libcurl库提供了一个python接口.libcurl是一个开源免费且方便快捷的基于客户端的url传输库,支持FTP,HTTP,HTTPS,IMAP,IMA ...

  3. 如何下载python模块_python安装模块与包

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序 ...

  4. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  5. python莫比乌斯环_python基础|模块

    1 模块简介 在python中常见的模块有三种,在python解释器中的内置模块,第三方模块和自定义模块.模块的有使用python编写的文件,有已被编译为共享库或DLL的C或C++扩展,也有使用C编写 ...

  6. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. python import变量_Python import模块调用

    开发过程中代码越写越多,在一个文件里代码会越来越长,不容易维护,为了容易维护代码,我们把很多函数分组,分别放在不同的文件里,在Python中,一个.py文件就是模块(Module) 工具/原料 Pyt ...

  8. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  9. python常用运维模块_python常用模块之一

    sys模块: sys模块是提供关于python本身的详细内在的信息的模块. sys.executable变量,它包含python解释器的路径 sys.platform变量,告诉我们现在处于什么操作系统 ...

最新文章

  1. oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?
  2. Unity3D架构之PureMVC
  3. 外部排序---置换选择+败者树
  4. 2021Java就业笔试题总结
  5. 在Spring框架中使用SQL存储过程
  6. 危险,几条可致命的Linux命令!
  7. TypeScript 的声明文件的使用与编写
  8. 第一部分 1.2 定义OC的类和创建OC的对象
  9. 麒麟安装增强功能失败(未解决):Could not downgrade policy file /etc/selinux/targeted/policy/policy.29
  10. python微信语音转发方法_语音转发方法与流程
  11. 关闭QQ弹出的腾讯网迷你版
  12. 可任意改变背景颜色的万年历
  13. c语言中以只读方式打开,C 中如何以只读方式打开文件
  14. Organ at Risk Segmentation for Head and Neck Cancer using Stratified Learning and Neural Architectur
  15. 变异凯撒(实验吧CTF题库-密码学)
  16. 群晖6.2开启shr格式
  17. CF大陆斗C战士(一)
  18. 兼容exe的linux系统,国产操作系统下想运行EXE?你何不虚拟个电脑系统出来
  19. 包青天人声接电话搞笑版铃声 包青天人声接电话搞笑版手机铃声...
  20. 什么是Hibernate方言和方言列表

热门文章

  1. 怎么把java设置高性能_2021-2-19:请问你知道 Java 如何高性能操作文件么?
  2. 计算机的基础学科是什么,【讨论】计算机科学与技术是否可以算作‘基础学科’呢?...
  3. 最适合中国国情的开源授权协议ZPL 1.0发布
  4. iosxib 设置图片_iOS-xib使用技巧[转载]
  5. spring+servlet+mysql架构的网页用javascript前端,java后端,带登录以及动态验证码界面
  6. 怎么用Python在Mac上关机
  7. 自定义prometheus exporter实现监控阿里云RDS
  8. 采用计算机发布调度命令时 必须严格遵守,铁路行车规章复习题
  9. 字节跳动2019笔试题王大锤
  10. 尝试理解ICA(Independent Component Analysis)独立成分分析