当前位置 : 主页 > 编程语言 > python >

使用python requests库上传文件时,name和filename乱码问题

来源:互联网 收集:自由互联 发布时间:2022-06-20
一.问题描述 在使用post方法请求接口时,请求的内容中包含附件(例如图片): 服务器需要用到图片的名称字段,来解析得到图片的分类信息(例如,这张图片属于子单照片,即name属

一.问题描述

在使用post方法请求接口时,请求的内容中包含附件(例如图片):

使用python requests库上传文件时,name和filename乱码问题_文件名

服务器需要用到图片的名称字段,来解析得到图片的分类信息(例如,这张图片属于子单照片,即name属性为【864_子单照片_0】)

但是发送请求后,服务器报错“必填参数为空”,抓包分析发现上传附件的文件名不正确,导致服务器无法正确解析文件名。

使用python requests库上传文件时,name和filename乱码问题_文件名_02

如上图所示:参数name与filename中有中文信息,请求时会自动将中文编码后再上传文件信息,导致服务器无法解析编码后的内容。从而导致服务器无法正确解析文件名。

二.相关代码

#coding=UTF-8
import requests


Base_URL = 'http://XX.XX.XX.XX'


def build_uri(endpoint):
return '/'.join([Base_URL, endpoint])


def post_method(url,data,files):
response = requests.post(url=url,data=data,files=files)
print(response.text)



if __name__ == '__main__':

file_name1 = 'value_1.txt'

with open(file_name1) as f1:
con = f1.read()
print(type(con))
print(con)

data = {"req": con}

headers = {"content-type": "multipart/form-data"}

files = {'864_子单照片_0': ("001_附件.jpg", open("001_附件.jpg", "rb"), "image/jpg", {})}

url = build_uri('mobile/postQCProblemCargo')

post_method(url, data, files)

三.解决方法

修改requests库所引用的urllib3库的源文件fields.py:

使用python requests库上传文件时,name和filename乱码问题_文件名_03

1、注释掉图中标记的一行(45行)

使用python requests库上传文件时,name和filename乱码问题_抓包_04

2、把图中标记的一行(46行)修改为:

value = '%s="%s"' % (name, value)

使用python requests库上传文件时,name和filename乱码问题_服务器_05 

四.修改后请求抓包结果

使用python requests库上传文件时,name和filename乱码问题_抓包_06

问题已解决。

去期待陌生,去拥抱惊喜。

上一篇:python之简单算法面试题
下一篇:没有了
网友评论