pycurl使用post方式上传文件 - Python - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > 脚本编程 > Python

pycurl使用post方式上传文件

发布时间:2014-04-06 来源:服务器之家

最近有个事情,需求是发送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 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做的小东西玩玩。

 

热点推荐

    SQL Error: select * from ***_***_news where id in ()