最近有个事情,需求是发送post请求到web服务器,达到文件上传的目的,这个当然是有原因的,因为那个网站没有做批量上传,而需要上传的东西又太多……好了,废话不多说,进入正题:
这样的小事情当然还是用python来写比较简单快捷,用到http请求最直接的方式是用标准库里面的urllib和urllib2,但不能满足这次的需求,因为文件上传要将form表单的method设置成multipart/form-data, 而urllib里面的实用的是默认的application /x-www-form-urlencoded,于是找到了pycurl poster 和urllib2_file三个可用的库,我只尝试了pycurl,其他的有时间再尝试。(http://blog.chinaunix.net/uid-1721137-id-348702.html这里有poster的尝试,我也主要从他这里获取的信息)
关于pycurl可以去它的主页上进一步了解(http://pycurl.sourceforge.net/),可以发送多种协议的信息,而且可以携带cookie,而且有并发控制的实现,很强大!它是著名的libcurl的python绑定,我上common-lisp.net上查了一下,lisp也有对应的库可以使用(cl-curl)!这个世界真美好!
# -*- coding: utf-8 -*-
import pycurl
import os
def upload(filename):
pc = pycurl.Curl()
pc.setopt(pycurl.POST, 1)
pc.setopt(pycurl.URL, 'your url')
pc.setopt(pycurl.HTTPPOST, [('file fieldname', (pc.FORM_FILE, filename)),\
('filed1_name', (pc.FORM_CONTENTS, "value"))])
pc.perform()
response_code = pc.getinfo(pycurl.RESPONSE_CODE)
pc.close()
if __name__ == "__main__":
filelist = os.listdir(".")
for f in filelist:
upload(f)
print "OK"
其中,your url是网站上传请求的url,file fieldname是的name,filename是要上传文件的路径,field1_name是form表单中其他字段的的name,value是对应的值。value的外层最好有FORM_CONTENTS包裹,不然有时候中文的编码问题会导致提交post失败。
这样就可以把当前目录的所有文件上传了,当然这还只是简单的尝试,libcurl功能十分强大,做爬取或自动登录啥的都是手到擒来,而且因为pycurl是堆libcurl的绑定,所以效率应该比urllib高不少,值得研究。决定抽空好好学习一下,并用lisp的cl-curl做的小东西玩玩。
分享到:
相关推荐
4. **文件上传与下载**:pycurl提供便捷的文件上传和下载功能,支持断点续传,可以处理大文件的高效传输。 5. **HTTP请求控制**:pycurl可以设置各种HTTP头,支持POST、PUT、DELETE等HTTP方法,还可以设置HTTP/1.1...
PyCurl支持各种特性,如HTTP POST、PUT、HEAD、DELETE等HTTP方法,还支持HTTP代理、SSL连接、cookies、文件上传、HTTP认证等。 **7.43.0版本说明:** 7.43.0是libcurl库的一个稳定版本,包含了一系列的改进和修复。...
pycurl使得Python程序员能够方便地利用libcurl的强大功能,包括HTTP、HTTPS、FTP、FTPS等协议的支持,以及对代理、SSL加密、cookie、文件上传和下载等多种功能的处理。 版本号“7.43.0.3”代表了pycurl的特定发行版...
`pycurl`是基于libcurl库的Python接口,提供了丰富的功能,如HTTP请求、文件上传、代理服务器支持、SSL加密、cookie处理、限速等。在版本7.43.0.1中,它包含了对最新HTTP协议特性的支持以及对一些已知问题的修复。 ...
libcurl是一个强大的URL传输库,而PyCurl则将这些功能无缝地整合到了Python中,使得开发者可以方便地进行网页抓取、文件上传下载等操作。 PyCurl的版本“7.18.2”是一个较旧但稳定版,它支持Python 2.x系列,对于...
- POST请求: ```python import pycurl from io import BytesIO from urllib.parse import urlencode post_data = {'key1': 'value1', 'key2': 'value2'} postfields = urlencode(post_data).encode('ascii'...
例如,你可以用PyCurl轻松地实现文件的上传下载、网页抓取、甚至是模拟登录和POST数据提交。 在给定的标题"pycurl-7.43.0.2-cp36-cp36m-win_amd64.whl"中,我们看到这是PyCurl的一个特定版本,适用于Python 3.6(cp...
《Python库pycurl的安装与使用详解》 pycurl是一个Python接口,用于处理libcurl,一个广泛使用的HTTP客户端库。这个“pycurl-7.20.1-bin-win32-py26.zip”文件是专为Windows 32位系统和Python 2.6版本设计的安装包...
这个库允许程序员通过多种协议与远程服务器交互,包括文件上传和下载,以及复杂的HTTP操作,如POST、PUT和HEAD请求。PyCurl支持SSL加密,可以处理代理、cookies和自动重定向,使得它成为网络编程中的一个不可或缺的...
6. **FTP操作**:支持FTP和FTPS协议,可以进行文件上传、下载等操作。 7. **URL重定向**:自动处理服务器返回的重定向响应。 8. **多线程**:利用libcurl的多线程特性,可以在单个进程中并发处理多个网络请求。 ...
- **简介**:一个高效的HTTP客户端库,支持连接池管理、文件POST等特性。 - **用途**:适用于大规模并发请求的应用场景。 **6. httplib2** - **简介**:一个Python HTTP客户端库,提供了缓存机制等功能。 - **用途*...
标题 "pycurl-7.43.0.3-cp27-cp27m-win_amd64_hzd" 暗示我们讨论的是一个针对Python 2.7版本的pycurl库的特定发行版,该库适用于64位Windows系统。pycurl是一个用Python编写的库,它为Python提供了libcurl的接口,...
在Python中,`pycurl`允许开发者用Python编写代码来实现这些协议的功能,例如发起HTTP请求、处理cookies、进行文件上传等。`pycurl`还支持SSL加密、HTTP POST、HTTP PUT、HTTP基本认证、代理服务器等高级特性,这...
本篇文章将深入探讨如何利用Python中的`PycURL`库来实现POST请求,并详细解释代码中的各个部分,帮助读者更好地理解并应用这一技术。 #### PycURL简介 `PycURL`是一个Python接口,用于libcurl库,这是一个强大的...
### Python的pycurl包用法详解 ...无论是简单的 GET 请求还是复杂的 POST 操作,甚至是处理 SSL 证书验证或重定向,`pycurl` 都能轻松应对。希望本文介绍的这些知识点能够帮助你在项目中更好地利用 `pycurl`。
在实际应用中,PyCurl常被用于爬虫开发、文件上传下载、网页抓取等场景,其高效的性能和丰富的功能使其成为Python网络编程中的重要工具。然而,需要注意的是,由于PyCurl直接操作底层网络接口,因此对于错误处理和...
`pycurl`库不仅支持HTTP,还支持FTP、FTPS、HTTPS等多种协议,具备处理HTTPS证书、POST请求、PUT上传、FTP上传、代理、cookies、身份验证等功能。其高效的特性使得它在某些场景下比Python内置的`urllib`库表现更优。...
- **发送音频到服务器**: `use_cloud()`函数打开录制的WAV文件,读取其内容,设置HTTP头信息,然后使用`pycurl`向百度服务器发送POST请求,服务器将返回识别的文本结果。 4. **关键代码片段**: - `get_token()`:...
PyCurl的出现使得Python开发者能够轻松地实现复杂的网络操作,如文件上传下载、网页抓取、POST数据提交等。 PyCurl的使用并不复杂,主要依赖于其丰富的API接口。开发者可以通过设置各种选项来定制请求行为,例如...