pycurl 学习笔记一

pycurl是功能强大的python的url库,是用c语言写的,速度很快,比urllib和httplib都快

 

调用方法:

import pycurl

c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://api.minicloud.com.cn/statuses/public_timeline.xml')
import StringIO   <-- 这个用到里面的write函数
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write) #把StringIO的写函数注册到pycurl的WRITEFUNCTION中,即pycurl所有获取的内容都写入到StringIO中,如果没有这一句,pycurl就会把所有的内容在默认的输出器中输出
c.perform()
print b.getvalue()

 

这里有一个小例子,用来获取微博上流行的短地址对应的真实地址的

import StringIO
import pycurl

c = pycurl.Curl()
str = StringIO.StringIO()
c.setopt(pycurl.URL, "http://t.cn/aKln8T")
c.setopt(pycurl.WRITEFUNCTION, str.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)

c.perform()
print c.getinfo(pycurl.EFFECTIVE_URL)

 

可见pycurl是十分强大和简洁的,只是要熟悉它的很多属性

 

这是一个很好的学习pycurl的网站:http://nullege.com/codes/search/pycurl.EFFECTIVE_URL

03-23
### pycurl 使用教程及常见问题解决 #### 安装 pycurl 要使用 `pycurl`,首先需要安装它。可以通过以下方法完成安装: 1. **通过 pip 安装** 如果系统已安装 `pip` 工具,则可以运行以下命令来安装 `pycurl`: ```bash pip install pycurl ``` 2. **手动编译安装** 对于某些特定环境(如旧版本 Python),可能需要手动编译并安装 `pycurl`。这通常涉及以下几个步骤: - 下载源码包:可以从官方仓库获取最新版的 `pycurl` 源码。 - 编译依赖库:确保已经安装了 libcurl 和其开发头文件。 ```bash sudo apt-get install libcurl4-openssl-dev # Ubuntu/Debian sudo yum install libcurl-devel # CentOS/RHEL ``` - 执行安装脚本: ```bash python setup.py build sudo python setup.py install ``` #### 基础使用示例 以下是几个常见的 `pycurl` 使用场景及其代码实现。 ##### 发送 GET 请求 发送简单的 HTTP GET 请求到指定 URL 并打印响应内容: ```python import pycurl from io import BytesIO buffer = BytesIO() crl = pycurl.Curl() # 设置目标URL crl.setopt(crl.URL, 'http://example.com') # 将返回的内容写入缓冲区 crl.setopt(crl.WRITEDATA, buffer) # 执行请求 crl.perform() # 获取状态码和其他信息 status_code = crl.getinfo(pycurl.HTTP_CODE) print(f'Status Code: {status_code}') # 关闭连接 crl.close() # 输出响应体 body = buffer.getvalue().decode('utf-8') print(body) ``` ##### 发送 POST 请求 向服务器提交表单数据时可使用如下方式: ```python import pycurl from io import BytesIO buffer = BytesIO() crl = pycurl.Curl() # 配置POST参数 post_data = [('field_name', 'value')] crl.setopt(crl.POSTFIELDS, '&'.join([f'{k}={v}' for k, v in post_data])) # 设置目标URL crl.setopt(crl.URL, 'http://example.com/post-endpoint') # 启用POST模式 crl.setopt(crl.POST, True) # 处理输出流 crl.setopt(crl.WRITEDATA, buffer) # 执行操作 crl.perform() crl.close() response_body = buffer.getvalue().decode('utf-8') print(response_body) ``` #### 常见问题及解决方案 1. **错误提示:“libcurl link-time version is older than compile-time version”** 这通常是由于系统的动态链接库版本低于构建时使用的版本所致。尝试重新安装最新的 `libcurl` 库以及对应的开发工具链[^4]。 2. **无法找到 SSL 支持模块** 若遇到类似 “Could not find OpenSSL or LibreSSL library” 的报错,请确认是否正确安装了支持 HTTPS 协议所需的加密库,并将其路径加入到环境变量中[^5]。 3. **性能优化建议** 当处理大量并发网络请求时,考虑利用多线程或多进程模型提升效率;或者切换至异步框架(如 aiohttp)以获得更好的扩展性和资源利用率[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值