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

#! /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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库创建用户root@%

步骤: 以 rootlocalhost 登录数据库,即先登录数据库所在的主机,再以 root 用户登录数据库: [roothtlwk0001host ~]# mysql -uroot -p123456必须先删除原来的 root% 用户: mysql> drop user root%; Query OK, 0 r…

第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种

第三方工具监控java进程这样就可以运行Java代码了。 也许它甚至可以在生产服务器上运行。 当您做好工作后,我们得到了好消息和令人讨厌的消息。 令人讨厌的消息是,现在开始调试。 就是进行调试和应用程序性能监视。 这意味着您不仅需要查看编写的代码&a…

python中的numpy函数算相关系数_NumPy ufunc通用函数

NumPy 提供了两种基本的对象,即 ndarray 和 ufunc 对象。前面几节已经介绍了 ndarray,本节将介绍 Numpy。ufunc 是 universal function 的缩写,意思是“通用函数”,它是一种能对数组的每个元素进行操作的函数。许多 ufunc 函数都是…

MySQL 8.x 以前的版本修改密码规则

查看密码相关变量: mysql> show variables like validate_password%; ---------------------------------------------- | Variable_name | Value | ---------------------------------------------- | validate_password_dictionary_f…

aws mfa 认证_如何为您的AWS账户设置多因素身份验证(MFA)

aws mfa 认证第1步 : 转到AWS控制台并使用您的用户名密码登录。 第2步 : 转到服务-> IAM 第三步: 单击您的根帐户上的激活MFA 第4步 : 在步骤3中,点击屏幕上的管理MFA按钮。 步骤5: 单击分配…

python具体工作内容_有没有人知道公司里用python工作的内容有什么

2018-07-11 回答python的特色 简单 python是一种代表简单主义思想的语言。阅读一个良好的python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 …

如何导入hadoop源码到eclipse

需要进一步学习hadoop、需要看看内部源码实现,因此需要将hadoop源码导入都eclipse中。 简单总结一下,具体步骤如下: 首先确保已经安装了git、maven3、protobuf2.5、如果没有安装需要提前安装一下 0、preliminary linux distribution(我的…

线程池的学习

文章目录线程池原理JDK 1.5 之后提供的线程池工厂类线程池的使用步骤线程池原理 1.创建多个线程对象,存放到集合中,集合可以是 ArrayList 或者 LinkedList 2.从集合中取出一个线程对象,执行指定的任务 3.一个线程对象只能执行一个任务&#…

javafx 界面_JavaFX的科幻用户界面第1部分

javafx 界面使用JavaFX创建的Sci-Fi UI成形窗口 虚构的UI可以变成现实吗? 成长于80年代的小时候,我看到了自己的科幻电影,这确实激发了我对图形用户界面(GUI)的热爱,尤其是试图使科幻UI在现实世界中成为可…

token验证_如何利用 C# 爬取带 Token 验证的网站数据?

在对文本数据的情感分析中,基于情感词典的方法是最简单也是最常用的一种了。它的大体思路如下:对文档分词,找出文档中的情感词、否定词以及程度副词,然后判断每个情感词之前是否有否定词及程度副词,将它之前的否定词和…

hadoop2.6.0+eclipse配置

【0】安装前的声明 0.1) 所用节点2个 master : 192.168.119.105 hadoop5 slave : 192.168.119.101 hadoop1 (先用一个slave,跑成功后,在从master分别scp到各个slaves即可】) 0.2) 每个机子的那些个文件…

线程同步的学习

文章目录一、同步代码块二、同步方法静态同步方法三、Lock解决线程安全问题的三种方案:同步代码块、同步方法、使用 Lock一、同步代码块 synchronized(同步锁对象) { 需要同步操作的代码 }注: 1.锁对象可以是任意对象 2.必须保证多个线程使用同一个锁对…

spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置

spock测试我为Maven创建了一个示例Groovy项目,该项目在一个项目中混合了Spock测试和JUnit 5测试。 在下一节中,我将描述如何设置这种Maven项目。 在项目中启用Groovy 首先,您必须在项目中启用Groovy。 一种可能性是将GMavenPlus插件添加到您…

python 图片识别_python识别图片文字

滑稽研究所python识别图片文字哈喽,大家好呀,我是滑稽君。大家在写论文时可能经常碰到无法复制文字的文章。明明找到了需要的内容却无法直接复制使用,这让我们十分苦恼。那么本期滑稽君就告诉大家如何使用python识别图片中的文字。滑稽君整理…

MySQL数据库的数据类型decimal详解

大概意思是这样的: decimal(m,d) m是数字的最大位数,他的范围是从1-65; d是小数点后的位数,他的范围是0-30,并且不能大于m。 如果m被省略了,那么m的值默认为10, 如果d被省略了,那么d…

如何撰写论文

【0】README 0.1)本内容转自一个学长的口述,该学长在硕士期间发表论文6篇,现在 某高校读博; 0.2)鉴于看的人比较多,于今日对文本进行排版便于各位阅读(timestamp: 1512141116)&…

java查找链表中间元素_如何通过Java单次查找链表的中间元素

java查找链表中间元素您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员。 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还会要求编写代码。 为了回答这个问题,候选人必须熟悉LinkedList的数…

python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...

在 PHP 中,想要获取由 SELECT 语句查询到的结果集中有多少条数据的话,则需要使用 mysqli_num_rows() 函数来实现。首先我们来看一下该函数的语法结构:面向对象风格的写法$mysqli_result -> num_rows;其中 $mysqli_result 为使用 mysqli_qu…

Windows系统下,好用的录屏软件工具/屏幕录制工具

文章目录万兴神剪手Open Broadcaster Software(OBS)QQ录屏Window 10 自带的屏幕录制软件录屏王bandicam万兴神剪手 可以录制网络视频、视频教程、游戏指南、演示文稿等。除了一些需要调用显卡的游戏,游戏窗口画面都能录制。神剪手的后期剪辑…

What are definitions of ​Model, Inference and Algorithm and its associations ?

【1】拿初中的二元一次方程来说明: 1.1)说model就好比一元二次方程,它是个方程模型;1.2)再说inference是求解该方程的某种方法——加减消元法(重在推理);1.3)最后说algo…