Python Pycurl的属性与方法案例详解

作者:xusong 时间:2022-09-27 04:57:23 

Pycurl包是一个libcurl的Python接口,由C语言编写的,功能强大,速度快。由于pycurl的属性和方法太多了,写这篇博文记录一下pycurl的属性和方法。

正常安装

pip install pycurl

如果出现问题,可以按照系统版本搜索安装方法,比如centos7.1 安装pycurl

通用请求方法


import pycurl,urllib
from io import BytesIO

url = 'http://www.baidu.com'

headers = [
"User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3",
]

data = {
"cityListName":"",
"trade": ""
}

c = pycurl.Curl()#通过curl方法构造一个对象
#c.setopt(pycurl.REFERER, 'http://www.baidu.com/')#设置referer
c.setopt(pycurl.FOLLOWLOCATION, True)#自动进行跳转抓取
c.setopt(pycurl.MAXREDIRS,5)#设置最多跳转多少次
c.setopt(pycurl.CONNECTTIMEOUT, 60)#设置链接超时
c.setopt(pycurl.TIMEOUT,120)#下载超时
c.setopt(pycurl.ENCODING, 'gzip,deflate')#处理gzip内容
# c.setopt(c.PROXY,ip)# 代理
c.fp = BytesIO()
c.setopt(pycurl.URL, url)#设置要访问的URL
c.setopt(pycurl.HTTPHEADER,headers)#传入请求头
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, urllib.urlencode(data))#传入POST数据
c.setopt(c.WRITEFUNCTION, c.fp.write)#回调写入字符串缓存
c.perform()

code = c.getinfo(c.HTTP_CODE)#返回状态码
html = c.fp.getvalue()#返回源代码

print c.getinfo(c.TOTAL_TIME)

GET请求方法


c = pycurl.Curl()   #通过curl方法构造一个对象
c.setopt(pycurl.FOLLOWLOCATION, True)   #自动进行跳转抓取
c.setopt(pycurl.MAXREDIRS,5)            #设置最多跳转多少次
c.setopt(pycurl.CONNECTTIMEOUT, 60)     #设置链接超时
c.setopt(pycurl.TIMEOUT,120)            #下载超时
c.setopt(pycurl.ENCODING, 'gzip,deflate')   #处理gzip内容
# c.setopt(c.PROXY,ip)  # 代理
c.fp = BytesIO()  
c.setopt(pycurl.URL, url)   #设置要访问的URL
c.setopt(pycurl.USERAGENT,ua) #传入ua
# c.setopt(pycurl.HTTPHEADER,self.headers)     #传入请求头
c.setopt(c.WRITEFUNCTION, c.fp.write)   #回调写入字符串缓存
c.perform()    
code = c.getinfo(c.HTTP_CODE)   #返回状态码
html = c.fp.getvalue()  #返回源代码

POST请求方法


c = pycurl.Curl()   #通过curl方法构造一个对象
c.setopt(pycurl.FOLLOWLOCATION, True)   #自动进行跳转抓取
c.setopt(pycurl.MAXREDIRS,5)            #设置最多跳转多少次
c.setopt(pycurl.CONNECTTIMEOUT, 60)     #设置链接超时
c.setopt(pycurl.TIMEOUT,120)            #下载超时
c.setopt(pycurl.ENCODING, 'gzip,deflate')   #处理gzip内容
# c.setopt(c.PROXY,ip)  # 代理
c.fp = BytesIO()  
c.setopt(pycurl.URL, url)   #设置要访问的URL
c.setopt(pycurl.USERAGENT,ua ) #传入User-Agent
# c.setopt(pycurl.HTTPHEADER,headers)     #传入请求头
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, urllib.parse.urlencode(data))
c.setopt(c.WRITEFUNCTION, c.fp.write)   #回调写入字符串缓存
c.perform()    
code = c.getinfo(c.HTTP_CODE)   #返回状态码
html = c.fp.getvalue()  #返回源代码

windows访问https

windows 访问https的方法,需要证书


import certifi
c.setopt(pycurl.CAINFO, certifi.where())

获取网页多重跳转之后的地址


c.getinfo(pycurl.EFFECTIVE_URL) 获取网页的最终地址

记录Cookie


c.setopt(pycurl.COOKIEFILE, "cookie_file_etherscan") #读取cookie
c.setopt(pycurl.COOKIEJAR, "cookie_file_etherscan") #设置cookie

其他属性

pycurl的部分API:


pycurl.Curl() #创建一个pycurl对象的方法
pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL
pycurl.Curl().setopt(pycurl.MAXREDIRS, 5) #设置最大重定向次数
pycurl.Curl().setopt(pycurl.CONNECTTIMEOUT, 60)
pycurl.Curl().setopt(pycurl.TIMEOUT, 300) #连接超时设置
pycurl.Curl().setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)") #模拟浏览器
pycurl.Curl().perform() #服务器端返回的信息
pycurl.Curl().getinfo(pycurl.HTTP_CODE) #查看HTTP的状态 类似urllib中status属性

pycurl.NAMELOOKUP_TIME 域名解析时间
pycurl.CONNECT_TIME 远程服务器连接时间
pycurl.PRETRANSFER_TIME 连接上后到开始传输时的时间
pycurl.STARTTRANSFER_TIME 接收到第一个字节的时间
pycurl.TOTAL_TIME 上一请求总的时间
pycurl.REDIRECT_TIME 如果存在转向的话,花费的时间
pycurl.HTTP_CODE HTTP 响应代码
pycurl.REDIRECT_COUNT 重定向的次数
pycurl.SIZE_UPLOAD 上传的数据大小
pycurl.SIZE_DOWNLOAD 下载的数据大小
pycurl.SPEED_UPLOAD 上传速度
pycurl.HEADER_SIZE 头部大小
pycurl.REQUEST_SIZE 请求大小
pycurl.CONTENT_LENGTH_DOWNLOAD 下载内容长度
pycurl.CONTENT_LENGTH_UPLOAD 上传内容长度
pycurl.CONTENT_TYPE 内容的类型
pycurl.RESPONSE_CODE 响应代码
pycurl.SPEED_DOWNLOAD 下载速度
pycurl.INFO_FILETIME 文件的时间信息
pycurl.HTTP_CONNECTCODE HTTP 连接代码

参考文档

http://pycurl.io/docs/latest/quickstart.html

来源:https://junyiseo.com/python/607.html

标签:python,pycurl
0
投稿

猜你喜欢

  • Python设计模式之工厂模式简单示例

    2022-10-06 13:22:38
  • 理想高通滤波实现Python opencv示例

    2022-09-29 03:58:07
  • 用数据库生成不重复的流水号

    2007-10-06 22:49:00
  • Mysql数据库备份和还原常用的命令

    2011-12-01 10:41:54
  • 微信跳一跳小游戏python脚本

    2023-07-06 10:15:15
  • Python不使用int()函数把字符串转换为数字的方法

    2022-04-22 02:32:33
  • 巧用缓存提高ASP应用程序的性能

    2008-03-09 15:23:00
  • asp内置对象Application详解

    2007-09-19 12:08:00
  • Python网络爬虫之获取网络数据

    2022-10-09 12:35:54
  • SQL Server 2005常见问题浅析

    2009-03-16 14:06:00
  • 如何过滤中国站长站(chianz)文章干扰码

    2008-01-04 20:14:00
  • Python爬虫之网页图片抓取的方法

    2021-12-19 00:47:20
  • 简单触发器的使用 献给SQL初学者

    2011-09-30 11:27:49
  • 将以用户为中心的设计嵌入产品设计和开发流程

    2009-08-11 14:27:00
  • 深入了解和应用Python 装饰器 @decorator

    2024-01-02 09:20:05
  • 举例讲解Linux系统下Python调用系统Shell的方法

    2023-08-25 00:04:46
  • 5.PHP的其他功能

    2023-11-14 16:45:42
  • Python基于pillow判断图片完整性的方法

    2021-05-12 21:55:50
  • Qzoneing主题视觉设计分享

    2009-07-21 18:12:00
  • python导入坐标点的具体操作

    2023-02-24 19:59:46
  • asp之家 网络编程 m.aspxhome.com