Python Pycurl属性与方法实战指南:安装、请求与高级配置
本文详细介绍Python Pycurl库的安装方法及核心属性与使用方法。涵盖GET与POST请求的标准实现、Windows环境下HTTPS访问的证书配置、多重跳转处理、Cookie持久化以及性能监控指标。通过具体代码案例解析关键API,帮助开发者高效利用libcurl进行网络编程。
Pycurl是libcurl的Python封装接口,底层由C语言实现,具备功能丰富且执行效率高的特点。鉴于其提供的属性和方法繁多,本文旨在系统梳理并记录Pycurl的主要属性与方法,供开发者参考。
常规安装方式
pip install pycurl
若遇到安装问题,建议根据具体操作系统版本搜索对应的解决方案。例如,在CentOS 7.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资源时,必须正确配置SSL证书。具体操作需引入certifi库,并通过setopt方法指定CAINFO路径,以确保连接安全。
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
至此,关于Python Pycurl属性与方法的案例详解介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续章节,感谢大家的支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









