前言

文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有。但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例。

post请求中的:Content-Type:multipart/form-data  这种类型便是上传文件。

一、环境安装、抓包分析

1、pip install requests_toolbelt,post请求 multipart/form-data  类型

C:\Users\Administrator>pip install requests_toolbelt
Requirement already satisfied: requests_toolbelt in d:\path_python\lib\site-packages (0.9.1)
Requirement already satisfied: requests<3.0.0,>=2.0.1 in d:\path_python\lib\site-packages (from requests_toolbelt) (2.20.1)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (2019.6.16)
Requirement already satisfied: idna<2.8,>=2.5 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (2.7)
Requirement already satisfied: urllib3<1.25,>=1.21.1 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (1.24.3)

2、先抓下登录接口,因为先登录成功后才能上传文件。写上登录代码,让其能正常登录。

import requests

s = requests.session()
login_url = 'http://127.0.0.1/zentao/user-login.html' # 登录url
data = 'account=admin&password=e10adc3949ba59abbe56e057f20f883e&keepLogin%5B%5D=on&referer=http%3A%2F%2F127.0.0.1%2Fzentao%2Fdoc-browse-1-byModule-0-id_desc-doc.html'
login_r = s.post(login_url, params=data) # 传 params 参数 r1 = s.get('http://127.0.0.1/zentao/doc-browse-1-byModule-0-id_desc-doc.html') # 登录访问的 html
print(r1.content.decode('utf-8'))

2、操作上传文件(文件我就上传一个桌面的:test.png),fiddler 切换至WebForms就看得比较清楚了。

二、写python代码请求

1、将抓包的接口写下,顺序:调试登录、上传、检查点。

2、也需导入模块from requests_toolbelt import MultipartEncoder

3、MultipartEncoder 传的参数注意,特别是图片参数,这里list里面元组:fields=[(name,value), (name2, value)]

4、禅道文件上传代码参考如下:

from requests_toolbelt import MultipartEncoder
import requests # 登录
s = requests.session()
login_url = 'http://127.0.0.1/zentao/user-login.html'
data = 'account=admin&password=e10adc3949ba59abbe56e057f20f883e&keepLogin%5B%5D=on&referer=http%3A%2F%2F127.0.0.1%2Fzentao%2Fdoc-browse-1-byModule-0-id_desc-doc.html'
login_r = s.post(login_url, params=data) # 传 params 参数 # 断言是否登录成功
r1 = s.get('http://127.0.0.1/zentao/doc-browse-1-byModule-0-id_desc-doc.html')
if '产品主库' in r1.content.decode('utf-8'):
print('登录成功')
else:print('登录失败') # 文件上传保存
# 传参数,name 对应 value,注意图片路径的填写。为空的一些参数不影响的去前提下可以删除。
s_url = 'http://127.0.0.1/zentao/doc-create-1-0.html'
body = MultipartEncoder(
fields=[
('lib', ''),
('uid', '5dec436e32b85'),
('module', ''),
('title', '我的一个title'),
('type', 'text'),
('contentType', 'html'),
('files[]', ('test.png', open('C:\\Users\\Administrator\\Desktop\\test.png', 'rb'), 'image/png'))
])
r2 = s.post(s_url, data=body, headers={'Content-Type': body.content_type}) # Content-Type 自动获取 # 检查是否成功上传图片
res = s.get('http://127.0.0.1/zentao/doc-browse-1.html')
if '我的一个title' in res.content.decode('utf-8'):
print('已上传成功')
else:print('上传失败')

5、python控制台说“已上传成功”,但是我们首次执行最好还是肉眼看一下有没有问题。(下图显然没有问题)

但说到这里,不得不说这只是一次的测试请求,但是以后迭代,无数次回归咋办呢?这个问题和我们手工操作是一样的,好比如你想title每次都一样,但是只能存在一条数据。

那么就可以①逻辑删除:操作删除按钮、物理删除:连接数据库执行删除语句。欢迎来QQ交流群:482713805

python接口自动化7-post文件上传的更多相关文章

  1. requests接口自动化7-Multi/form-data文件上传形式的post请求:files

    Multi/form-data文件上传形式的post请求:用files传参 fiddler里请求响应内容; 代码: import requests from requests_toolbelt imp ...

  2. python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例

    import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...

  3. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  4. 基于python的selenium两种文件上传操作

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...

  5. python利用socket写一个文件上传

    1.先将一张图片拖入‘文件上传’的目录下,利用socket把这张图片写到叫‘yuan’的文件中 2.代码: #模拟服务端 import subprocess import os import sock ...

  6. python写个简单的文件上传是有多难,要么那么复杂,要么各种,,,老子来写个简单的

    def upload(url,params): ''' 上传文件到server,不适合大文件 @params url 你懂的 @params {"action":"xxx ...

  7. 用python写一个简单的文件上传

    用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...

  8. python+selenium基础篇,文件上传

    1.百度查询图片,上传文件 2.实现代码如下: from selenium import webdriverfrom time import sleepdr=webdriver.Firefox()dr ...

  9. 【python接口自动化框架-unittest】如何传参数到下一个case

    1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...

  10. uedit修改文件上传路劲,支持api文件接口

    首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来 serverUrl: &quo ...

随机推荐

  1. 工具-Xmind常用快捷键/使用

    1-快捷键 Ctrl+Shift+L 快捷键助手 Ctrl+Home 返回中心主题 Ctrl+] 插入摘要 Ctrl+I 插入图片 Ctrl+Shift+H 插入超链接 Ctrl+1,2,3,4,5, ...

  2. supervisor 工具使用

    最近项目要使用supervisor 来管理程序,简单查了查,发现比较容易使用: 中文博客查了查,发现很多人都写出了教程,我这边就懒得写了,找了几个能看懂的记录如下: https://www.cnblo ...

  3. Python网络爬虫_Scrapy框架_2.logging模块的使用

    logging模块提供日志服务 在scrapy框架中已经对其进行一些操作所以使用更为简单 在Scrapy框架中使用: 1.在setting.py文件中设置LOG_LEVEL(设置日志等级,只有高于等于 ...

  4. 服务监控之 Spring Boot Admin.

    一.概述  开始阅读这篇文章之前,建议先阅读下<SpringBoot 之Actuator>,该篇文章提到 Spring Boot Actuator 提供了对单个Spring Boot的监控 ...

  5. Linux使用之centos下安装Java环境并运行Java程序

    前言 在Java中所有的程序都是在JVM上运行的.Java虚拟机(JVM)读取并处理经过编译的与平台无关的*.class文件.因为Java语言源程序编写后,先使用Java伪编译器进行伪编译,将其转换为 ...

  6. tensorflow convert_variables_to_constants

    在使用tf.train.Saver函数保存模型文件的时候,是保存所有的参数信息,而有些时候我们并不需要所有的参数信息.我们只需要知道神经网络的输入层经过前向传播计算得到输出层即可,所以在保存的时候,我 ...

  7. 在ASP.NET中备份数据库以及还原(不成熟)

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  8. table-layout:fixed

    table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...

  9. ASP.NET Core 3.0 使用 gRPC无法编译问题

    一.问题 创建了gRPC项目后,编译发现报错: 二.解决 1.检查项目路径是否存在中文 2.检查当前Windows用户目录是否为非英文字符,如果是则必须改为英文 修改方法: https://jingy ...

  10. H5 App实现热更新,不需要重新安装app

    直接上代码吧,你竟然搜到了我的文章就应该知道了,为什么要热更新 //app热更新下载 //假定字符串的每节数都在5位以下 function toNum(a) { //也可以这样写 var c=a.sp ...