robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”

 

设置的headers信息

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第1张图片

发起请求后服务器端报错

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第2张图片

寻找到原因是因为content-type里面没有添加boundary信息 ,重新修改headers参数

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第3张图片

重新请求接口,不报上面的错误了,但是又报出了另外的错误

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第4张图片出现了空指针异常的错误,咨询了开发应该是没有获取到文件信息,不太清楚具体错误的原因

解决办法:

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第5张图片

尝试不在headers里面加content-type ,直接去掉了headers以后,调用接口正常

通过fiddle抓包到robotframework发起的请求,从请求头里面 可以看到是自带了content-type的,证实了requests模块会自己处理

fiddler如何抓包robotframework发起的请求

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第6张图片

 


2020-08-11更新:

文章浏览量已经突破2.5万了,看来很多朋友都遇到了这个问题,最近又开始弄接口测试,正好进一步深挖一下该问题

 首先弄清什么是boundary

boundary的作用:

当content-type为multipart/form-data类型时,需要用boundary指定分隔符。所以boundary后面跟的随机数,就是分隔符,后端就是通过解析到boundary的值作为分隔符来分隔参数的。

一般来说都不需要手动添加boundary值,浏览器、python的request库都会自动设定boundary的值

那么问题来了,为什么手动设置了boundary的值,反而用不起了呢?

后端依旧报出了空指针异常的错误,我所调的接口没有传递其他参数,就上传了一个文件,咋后端就没拿到呢?

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第7张图片

 这个时候就真的万分感谢fiddler了,通过不断的对比请求,终于发现了问题所在

下图是通过robotframework发起的请求,在fiddler里面查看到的,content-type里面的值是我手动设置的,没有什么问题

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第8张图片

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第9张图片

当看到textview里面的内容,就出现问题了,7f4bc4aa6d655ada3f72c9ef0ab75474这一串是什么?咋和我设置的ba77f35b192c8918628309c77e6add06完全不一样呢 

robotframework调用上传文件接口报错“the request was rejected because no multipart boundary was found”_第10张图片 

问题发现了,content-type里面的boundary和实际传到后端的值里面的分隔符完全不一样,后端用ba77f35b192c8918628309c77e6add06作为分隔符去textview里面的内容,但textview里面的实际的分隔符是7f4bc4aa6d655ada3f72c9ef0ab75474,由于这两个分隔符不一致,所以后端没有拿到参数值,抛出了空指针的异常

为什么会造成这个原因,初步怀疑是虽然手动设置了content-type,但post request关键字本身也会生成一个content-type,该content-type里面的boundary就写到了传给后端的表单值里面去了,但是自动生成的content-type又没去覆盖手动设置的content-type,所以导致了headers里面的boundary和表单值里面的boundary不一致

以上纯属猜测,也没找到确切的资料,不过问题应该是这个问题,至于产生这个问题的原因是不是我猜测的那样就不清楚了。。。

你可能感兴趣的:(RF,自动化测试,robotframework)