Python调用应用上传文件接口,被应用日志提示Failed to parse multipart servlet request处理

项目场景

一个基于tomcat的应用,提供了文件上传接口,通过Python程序调用上传文件接口,应用日志报错:
Failed to parse multipart servlet request
Invalid chunk header
No data available due to previous error

问题分析

看报错,都是提示请求体错误,所以我通过添加代码的方式挂了个BP代理:

//代理设置,先通过本地的8080端口,同时bp监听本地8080
fiddler_proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}
//请求中添加proxies=fiddler_proxies
response = requests.post(url=url, headers=self.headers, files=files, proxies=fiddler_proxies)

但添加代理后,可正常发起请求;关闭代理后,无法正常发起请求;同时看代理抓取的请求头和请求体均正常。
故决定代码中同时将self.headers(请求头)给打印出来。

对照后发现,发送的请求头多了一个Transfer-Encoding: chunked
经查询,使用requests发起请求时不需要这个请求头,考虑是请求头异常,导致tomcat无法正常解析,故停止接收获取请求体,产生文件内容异常的报错,而通过代理时,包先在windows系统停留,对请求头进行了纠正,所以可以正常发起请求

解决方案

代码中注释掉Transfer-Encoding: chunked请求体即可,若是其它报错,建议参照接口文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值