使用python或robotframework调multipart/form-data接口上传文件

这几天调一个multipart/form-data类型的接口,遇到点小阻碍。之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使。在网上查找发现用requests库做这个更强大。下面具体介绍一下python-requests及robotframework-RequestsLibrary实现multipart/form-data接口上传文件。
1、从fiddler查看接口长这样:
Header:

WebForms:

2、python-requests实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests #导入依赖模块

#构造数据,设置file为一个tuple字典形式,看到网上也有构造成list的形式的,没有走通。
#示例接口是普通的字段和文件混合传的,所以根据上面截图的一行行对应下来,就是这个样子的
#为什么用这个形式,查看官方文档:#http://docs.python-requests.or ... files

multiple_files = {‘id‘:(None,‘181‘),
‘title‘:(None,u"拉新活动"),
‘forceExternalBrowser‘:(None,u"否"),
‘type‘:(None,u"文章"),
‘location‘:(None,‘http://${domain}/activity/appointment/?id=44&_=360‘),
‘picUrl‘: (‘1.png‘, open(‘E:\\pics\\1.png‘, ‘rb‘), ‘image/png‘) }

#接口url
server_url=‘http://${domain}/cn-jsfund-client-manage/manage/cms/banner/add‘
#示例接口需登录,所以传了个cookie,放到header里面
headers1 = {‘Cookie‘:‘JSESSIONID=FD1CCB5ABFD79A055031B390397C411A‘}
#请求接口
response=requests.post(server_url,files=multiple_files,headers=headers1)
print response.text

3、robotframework-RequestsLibrary实现
下面是rf case,没有完整suite,记得先import library RequestsLibrary:

{{{更新一个banner
${id_tup} Evaluate (None,‘181‘) #创建tuple,因为不知道rf上怎么创建tuple,所以用了eval
${title_tup} Evaluate (None,u"拉新活动")
${for_tup} Evaluate (None,u"否")
${type_tup} Evaluate (None,u"文章")
${pic_tup} Evaluate (‘1.png‘, open(‘E:/pics/1.png‘, ‘rb‘), ‘image/png‘)
#然后创建file字典,和python那个一样了
&{multiple_files} Create Dictionary id=${id_tup} title=${title_tup} forceExternalBrowser=${for_tup} type=${type_tup} picUrl=${pic_tup}
#同样的:设置header
${header} Create Dictionary Cookie=JSESSIONID=0C800A4042D35BC62487E71431C2242D
#这个注释掉了,用requests库的Post也是可以发这个请求的,验证一下
Comment ${res} requests.Post ${domain}/cn-jsfund-client-manage/manage/cms/banner/add files=${multiple_files} headers=${header}
#下面两行,才是真正的requestslibrary的关键字,至于怎么长这样,请f5
#请注意,这里header一定要写在下面那行
Create Session api ${domain} ${header}
${res} Post Request api /cn-jsfund-client-manage/manage/cms/banner/add \ \ ${header} ${multiple_files}
log ${res.content} }}}
 
以上,为robotframework-requests (0.4.4)版本的实现方法。示例接口为普通的字段和文件混合传。RequestsLibrary作者在10月份fix了这个bug(https://github.com/bulkan/robotframework-requests/issues/131 )后,可以使用更简洁的方法处理这种情况了:

不要自己在header写Content-Type!

原文地址:https://www.cnblogs.com/changyou615/p/8776507.html

时间: 2024-10-10 22:45:59

使用python或robotframework调multipart/form-data接口上传文件的相关文章

form表单上传文件使用multipart请求处理

在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——spring MVC其中的一个优势.Spring通过对Servlet API的HttpServletRequest接口进行扩展,使其能够很好地处理文件上传.扩展后的接口名为org.springframework.web.multipart.MultipartHttpServletRequest,其内容如清单7-31所示. 清单7-31  org.springf

android form表单上传文件

原文地址:http://menuz.iteye.com/blog/1282097 Android程序使用http上传文件 有时,在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的方式.最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器.  Html代码   <form action="/Test

使用form表单上传文件

在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" 已经是个老生常谈的问题了,相信都能注意到,就不多说了. 2.上传下载的请求是不能用ajax提交返回json的. 3.当使用input[type='file'] 的onChange事件来触发文件上传的时候要注意当上传成功时清空input的时候,不能简单的使用$("input").val(

关于form表单上传文件的问题

最近在学习php,刚好学到利用表单上传文件这一知识.在学习的过程中,出现了这样几个问题,我是小白,还请高手指点. 大家都知道在上传文件时,我们要设置表单的MIME编码.默认情况,enctype的编码格:application/x-www-form-urlencoded,不能用于文件上传, 只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.但是我在接下来的操作中,遇到了这样的问题. <?php   if (isset($_POST['submit']) &

django 基于form表单上传文件和基于ajax上传文件

一.基于form表单上传文件 1.html里是有一个input type="file" 和 'submit'的标签 2.vies.py def fileupload(request): if request.method == 'POST': print(request.POST) print(request.FILES) # from django.core.files.uploadedfile import InMemoryUploadedFile print(type(reque

form表单上传文件

注意form表单上传文件的时候,要加上   enctype这个属性 原文地址:https://www.cnblogs.com/xiaoxiaoyao/p/8541923.html

WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)

简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分: HttpClient通过PostAsync提交数据时,第二个请求参数为抽象类HttpContent,当前我们需要通过multipart/form-data的方式模拟请求,multipart对应的请求HttpContent为MultipartContent及其子类MultipartFormData

ajax上传文件 基于jquery form表单上传文件

<script src="/static/js/jquery.js"></script><script> $("#reg-btn").click(function () { // 1. 取到用户填写的数据 var form_data_obj = new FormData(); form_data_obj.append('username',$('#id_username').val()); form_data_obj.append

PHP 后台程序配置config文件,及form表单上传文件

一,配置config文件 1获取config.php文件数组, 2获取form 表单提交的值 3保存更新config.php文件,代码如下: 1 $color=$_POST['color']; 2 $backtype=$_POST['backtype']; 3 4 $settings=include(dirname(__DIR__).'/config.php'); 5 6 $settings['themescolor']=(int)$color; 7 $settings['themesbackg