转载一段python代码,通过urllib2使用multipart/form-data来发送文件

import httplib, mimetypesdef post_multipart(host, selector, fields, files):"""
    Post fields and files to an http host as multipart/form-data.fields is a sequence of (name, value) elements for regular form fields.files is a sequence of (name, filename, value) elements for data to be uploaded as filesReturn the server's response page."""
    content_type, body = encode_multipart_formdata(fields, files)h = httplib.HTTP(host)h.putrequest('POST', selector)h.putheader('content-type', content_type)h.putheader('content-length', str(len(body)))h.endheaders()h.send(body)errcode, errmsg, headers = h.getreply()return h.file.read()def encode_multipart_formdata(fields, files):"""
    fields is a sequence of (name, value) elements for regular form fields.files is a sequence of (name, filename, value) elements for data to be uploaded as filesReturn (content_type, body) ready for httplib.HTTP instance"""
    BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$'CRLF = '\r\n'L = []for (key, value) in fields:L.append('--' + BOUNDARY)L.append('Content-Disposition: form-data; name="%s"' % key)L.append('')L.append(value)for (key, filename, value) in files:L.append('--' + BOUNDARY)L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))L.append('Content-Type: %s' % get_content_type(filename))L.append('')L.append(value)L.append('--' + BOUNDARY + '--')L.append('')body = CRLF.join(L)content_type = 'multipart/form-data; boundary=%s' % BOUNDARYreturn content_type, bodydef get_content_type(filename):return mimetypes.guess_type(filename)[0] or 'application/octet-stream'

建议将httplib.HTTP更换为httplib.HTTPConnection,这样一来就能在httplib.Connection初始化的时候传入一个timeout,以实现更灵活的控制。

参阅:
http://code.activestate.com/recipes/146306/
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

Http client to POST using multipart/form-data相关推荐

  1. 1. 恼人的Multipart form data

    文章目录 1. 概述 2. 问题 3. 解决方案 3.1 解决方案一 3.2 解决方案二 3.3 解决方案三 4. 总结 1. 概述 我目前在公司负责开放平台项目,使用spring-cloud-gat ...

  2. flux读取不到数据_WebFlux 中form data获取不到参数问题

    Spring WebFlux 中, request.queryParams 只能获取到 查询参数, 对于 form 提交的参数无法进行参数自动装载 处理方式有两种: 一. 自定义 ArgumentRe ...

  3. vue axios POST请求中参数以form data和request payload形式的原因

    HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value& ...

  4. 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...

    本文实例讲述了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法.分享给大家供大家参考,具体如下: HTTP请求中,如果是get请求,那么 ...

  5. AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式

    HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value& ...

  6. form data和request payload的区别

    2019独角兽企业重金招聘Python工程师标准>>> HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: < ...

  7. java request payload_前后端联调之Form Data与Request Payload,你真的了解吗?

    前言 做过前后端联调的小伙伴,可能有时会遇到一些问题.例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看 ...

  8. http协议的Request Payload 和 Form Data 的区别

    Request Payload VS Form Data 前端请求 我看了前端发起的请求,请求正文并不是我熟悉的 Form Data,而是 Request Payload.如图注意下面两个请求的 Co ...

  9. Vue-resource中post请求将data数据以request payload转换为form data的形式

    今天在做项目的时候 需要往api中发送一个json格式的对象,但是怎么改都不行,当然,使用的vue 的 http方法. 而且,开始使用时 vue-resource中post请求时的一个坑,vue-re ...

  10. angularjs中$http模块发送post请求request payload转form data

    背景: ionic+ angularjs+ cordova 在开发一个证书照片删除的时候,后端提供了一个post接口,需要前端将数据转化成form data.而在angularjs中,如果直接用pos ...

最新文章

  1. springmvc教程--RESTful支持详解
  2. 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)
  3. 编程心得体会_生信编程语言的经验之谈
  4. linux 内网服务 端口,LINUX 内网设备将服务映射到公网地址
  5. TensorFlow激励函数
  6. 17-03-21 课堂笔记
  7. Ogre引擎渲染系列之Normal Specular Mapping
  8. Excel如何对合并单元格数据进行排序
  9. csdn头像怎么改不了解决方法
  10. YOLO v5 实现目标检测(参考数据集自制数据集)
  11. R语言并行计算spearman相关系数
  12. MVC、MVP、MVI、MVVM 和 VIPER 设计模式
  13. HADOOP HA之NameNode HA集群配置与应用
  14. 创维YS代工E900V21E/TY1608-S905l3B-8822CS及7668无线通刷线刷包
  15. html背景飘汽水气泡,HTML5网页背景气泡上升
  16. 【HTML5学习笔记】HTML5:生活要对我下手了吗
  17. 小程序使用百度ai审核文本与图片信息
  18. win10强制进入恢复模式(win10强制进入恢复模式不能修复)
  19. Inkscape裁剪图片(pdf,svg,png,jpg)
  20. 【办公自动化】批量生成文件夹乱码解决方案

热门文章

  1. springboot-aop
  2. OC省字典的数组摘要集
  3. Android下异步扫描视频文件缩略图
  4. hibernate总结一
  5. ADO.NET数据访问模式
  6. JWT(JSON Web Token) 多网站的单点登录,放弃session 转载https://www.cnblogs.com/lexiaofei/p/7409846.html...
  7. 转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs
  8. python中filter、map、reduce的区别
  9. python学习笔记(五):装饰器、生成器、内置函数、json
  10. Yii2 Lesson - 03 Forms in Yii