电脑记事本做复杂网站/廊坊百度快照优化排名
最近重新回归一个旧项目,翻看了几年前我写的Python2脚本,该脚本能正常调用接口。但是我已经使用Python3环境了,于是改造了下脚本支持Python3。
问题
改造后问题就来了,使用之前的脚本采用requests库上传文件是正常存储中文名字,但是使用Python3版本之后,文件名就变得不正常了。

原因
初步定位是切换Python版本后,Java服务端接口本身不支持新的HTTP报文方式,于是只能修改Python脚本。

经过排查Python源码,因为Python3使用requests的时候,会调用urllib3库—>fields.py的新处理逻辑。

分析
当文件名是中文的时候,urllib3库会根据RFC2231规范进行转换格式。
value = email.utils.encode_rfc2231(value, 'utf-8')
就会转换格式为:
filename*=UTF8''文件名编码
这种格式的键值对。
解决方案
当然改源码文件是最快的,但是这样不利于每个Python环境支持。
那还是修改下requests请求吧,下面只是简单的处理,不一定是最优的代码。

结束语
这里记录一下文章,分享给大家。如果有更好的方法,也可以@testerzhang反馈下。
