前言

在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片

上传接口

1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了

2.用fiddler抓包,查看抓到的接口,以下这种接口就是multipart/form-data

  • Content-Type: multipart/form-data
  • body参数是这种格式:

-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"

yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png

先登录

1.因为上传图片是在登录之后操作的,这个需要依赖用户登录

  1. # coding:utf-8
  2. import requests
  3. base = 'http://127.0.0.1:81/' # 禅道的服务器地址
  4. loginUrl = base+"/zentao/user-login.html"
  5. h = {
  6. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
  7. "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  8. "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  9. "Accept-Encoding": "gzip, deflate",
  10. "Referer": "http://127.0.0.1/zentao/user-login.html",
  11. # "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的
  12. "Connection": "keep-alive",
  13. "Content-Type": "application/x-www-form-urlencoded",
  14. }
  15. body = {"account":"admin",
  16. "password":"e10adc3949ba59abbe56e057f20f883e",
  17. "keepLogin[]":"on",
  18. "referer":"http://127.0.0.1/zentao/my/"
  19. }
  20. s = requests.session() # 保持会话
  21. r = s.post(loginUrl, data=body, headers=h)
  22. print r.content # 打印结果看到location='http://127.0.0.1/zentao/my/'说明登录成功了

上传图片

1.上传图片以下这种格式:
-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"

yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png

2.写成字典格式,key对应name="imgFile"这里name对应的值

3.value里面是一个元组()

  • 第一个参数是filename=后面对应的值,没有就写None
  • 第二个是上面的这个值“”yoyoketang.png“”,或者是文件open打开的二进制流
  • 第三个是Content-Type对应的类型,如:"image/png"

f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\1.png", "rb"), "image/png")
}

验证是否上传成功

1.获取上传后的地址,放到浏览器的地址栏请求下,看是不是刚才上传的图片

参考代码

  1. # coding:utf-8
  2. import requests
  3. base = 'http://127.0.0.1:81/' # 禅道的服务器地址
  4. loginUrl = base+"/zentao/user-login.html"
  5. h = {
  6. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
  7. "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  8. "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  9. "Accept-Encoding": "gzip, deflate",
  10. "Referer": "http://127.0.0.1/zentao/user-login.html",
  11. # "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的
  12. "Connection": "keep-alive",
  13. "Content-Type": "application/x-www-form-urlencoded",
  14. }
  15. body = {"account":"admin",
  16. "password":"e10adc3949ba59abbe56e057f20f883e",
  17. "keepLogin[]":"on",
  18. "referer":"http://127.0.0.1/zentao/my/"
  19. }
  20. s = requests.session() # 保持会话
  21. r = s.post(loginUrl, data=body, headers=h)
  22. print r.content # 打印结果看到location='http://127.0.0.1/zentao/my/'说明登录成功了
  23. # 上传图片
  24. url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"
  25. f ={
  26. "localUrl": (None,"1.png"),
  27. "imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")
  28. }
  29. r = s.post(url1, files=f)
  30. try:
  31. jpgurl = base+r.json()["url"]
  32. print(u"上传图片后的url地址:%s"%jpgurl)
  33. except Exception as msg:
  34. print(u"返回值不是json格式:%s"%str(msg))
  35. print(r.content)

python接口自动化-multipart/form-data上传图片的更多相关文章

  1. python接口自动化11-post传data参数案例

    前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...

  2. python接口自动化11-post传data参数案例【转载】

    前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...

  3. python接口自动化16-multipart/form-data上传图片

    前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...

  4. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  5. python接口自动化25-发xml格式post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

  6. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  7. python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

  8. python接口自动化 -参数关联(一)

    原文地址https://www.cnblogs.com/yoyoketang/p/6886610.html 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址ht ...

  9. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

随机推荐

  1. 题解报告:zoj 3261 Connections in Galaxy War(离线并查集)

    Description In order to strengthen the defense ability, many stars in galaxy allied together and bui ...

  2. STM32HAL库学习之前言

    HAL库:HAL 的全称是: Hardware Abstraction Layer (硬件抽象层) ,是ST最新推荐的库.包括基本库和扩展库(功能外展):三种编程模型(轮询.中断和 DMA) 灵活的回 ...

  3. [已读]编写高质量代码 改善JavaScript程序的188个建议

    吐槽一万遍,买的最后悔的一本,没有之一,大量篇幅抄袭<高性能javascript>,我记得还有部分抄袭<javascript精粹>,<javascript模式>有没 ...

  4. 如何使用 Java 生成二维码

    步骤 下载jar包(QRCode.jar) maven项目手动引入jar包 编写实体类实现二维码的生成 controller调用 下载jar包(QRCode.jar) 下载网址如下: QRCode生成 ...

  5. Oracle、MySQL和SqlServe分页查询的语句区别

    ★先来定义分页语句将要用到的几个参数: int currentPage ; //当前页 int pageRecord ; //每页显示记录数 以之前的ADDRESSBOOK数据表为例(每页显示10条记 ...

  6. 盘点那些年,被Oracle收购的公司

    微博上看到一图,很清晰.盘点那些年,被Oracle收购的公司,Oracle日益强大,都收购了哪些公司呢?别再以为只有Sun啦...看看你都知道哪些? ps:Strategic Acquisitions ...

  7. 数据库连接池proxool的两种使用方式

    数据库连接池可以通过两种方式来应用,针对web应用和非web应用而来. 非web应用的数据库连接池配置 第一种方式:工厂类 非web应用可以使用工厂模式将数据库连接创建封装在一个工具类中,工具类中又使 ...

  8. 职业生涯手记——电视剧剧情O.O

    很多电视剧.偶像剧.电影里出现过一些场景,从来没想过狗血剧情是来源于现实.. 直到上周一开始,我慢慢相信了.. 事情是这样的. 我们小组有个组员H,从上周一开始他每天都去公司的座机电话接1~2个电话, ...

  9. ubuntu下操作Hadoop、hdfs、hbase、zookeeper时产生的一些问题及解决办法

    2019/05/29 1.在终端输入jps时,没有显示Hdfs的DataNode 在文件夹中分别找到DataNode 和Namenode的version,将Datanode的version改为与nam ...

  10. 【2018 CCPC网络赛】1001 - 优先队列&贪心

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6438 获得最大的利润,将元素依次入栈,期中只要碰到比队顶元素大的,就吧队顶元素卖出去,答案加上他们期中 ...