首页 > 编程语言 > 详细

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

时间:2021-09-02 22:04:59      阅读:61      评论:0      收藏:0      [点我收藏+]

一.问题描述

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

技术分享图片

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

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

技术分享图片

如上图所示:参数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:

技术分享图片

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

技术分享图片

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

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

技术分享图片 

四.修改后请求抓包结果

技术分享图片

问题已解决。

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

原文:https://www.cnblogs.com/hls-code/p/15220281.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!