Python中使用POST方式上传文件

 时间:2024-11-01 11:58:12

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

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

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

4、# test_client.pyfrom poster.encode import multipart_encodefrom poster.streaminghttp import register_openersimport 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()

5、很简单,文件就上传完成了。其中那个 register_openers() 相当于以下操作:from poster.encode import multipart_encodefrom poster.streaminghttp import StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandlerhandlers = [StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler]opener = urllib2.build_opener(*handlers)urllib2.install_opener(opener)

6、另外,poster 也可以携带 cookie,比如: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)

  • 新奥迪A6L安装高清头枕显示屏,奥迪MMI系统控制
  • 小米3触摸屏怎么校准
  • 传世手游复古区攻略
  • 蚂蚁森林龙抬头树装扮怎么发红包获取
  • 阑尾炎都有哪些症状(2)
  • 热门搜索
    儿童安全手抄报大全 自我保护手抄报 初二历史手抄报 孝德手抄报内容 红旗渠精神手抄报 文明安全手抄报 关于读书手抄报内容 关于黄河的手抄报初一 读书手抄报名人名言 生活中的语文手抄报