首页 > 编程 > Python > 正文

Python中使用POST方式上传文件

2019-11-06 07:08:41
字体:
来源:转载
供稿:网友

如果只是要模拟提交一个不包含文件字段的表单,实现起来是很简单的,但涉及到文件上传就有一点小复杂,需要自己对文件进行编码,或者使用第三方模块。

如果机器上有 PycURL,那么可以使用 PycURL 来上传文件。

不过,由于 PycURL 需要用到 curl,在 Windows 下安装可能会有点麻烦,除 PycURL 外,也有一些其它实现 POST 文件上传的方式,比如 这儿 的 2 楼有人贴出了一个将文件进行编码之后再 POST 的方法,另外还有MultipartPostHandler、urllib2_file、poster 等第三方模块。但 MultipartPostHandler 这个模块似乎比较老了,urllib2_file 我试用了一下遇到错误没有成功,这儿我想介绍的是另外一个第三方模块 poster。

如果机器上安装了 Python 的 setuptools,可以通过下面的命令来安装 poster:

easy_installposter

装完之后,就可以像下面这样上传文件了:

[python] view plain copy 在CODE上查看代码片# test_client.py  from poster.encode import multipart_encode  from poster.streaminghttp import register_openers  import urllib2    # 在 urllib2 上注册 http 流处理句柄  register_openers()    # 开始对文件 "DSC0001.jpg" 的 multiart/form-data 编码  # "image1" 是参数的名字,一般通过 HTML 中的 <input> 标签的 name 参数设置    # headers 包含必须的 Content-Type 和 Content-Length  # datagen 是一个生成器对象,返回编码过后的参数  datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})    # 创建请求对象  request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)  # 实际执行请求并取得返回  PRint urllib2.urlopen(request).read()  

很简单,文件就上传完成了。

其中那个 register_openers() 相当于以下操作:

[python] view plain copy 在CODE上查看代码片from poster.encode import multipart_encode  from poster.streaminghttp import StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler     handlers = [StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler]  opener = urllib2.build_opener(*handlers)  urllib2.install_opener(opener)  另外,poster%20也可以携带%20cookie,比如:

[python] view%20plain copy opener = poster.streaminghttp.register_openers()  opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))    params = {'file': open("test.txt", "rb"), 'name': 'upload test'}  datagen, headers = poster.encode.multipart_encode(params)  request = urllib2.Request(upload_url, datagen, headers)  result = urllib2.urlopen(request)  
上一篇:python简介

下一篇:Python学习心得

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表