前言

近日,在做接口测试时遇到一个奇葩的问题。

使用post请求直接通过接口上传文件,无法识别文件。

遇到的问题

以下是抓包得到的信息:

以上请求是通过Postman直接发送请求的。

在这里可以看到消息头里包含:Access-Token和Content-Type

因此在在使用python直接调用此接口时,传入的Headers也是包含这两个值的:

def send_app_logo(token, appid):
url = "XXXXXXXXX"
headers = {
"Access-Token": token,
"Content-Type": "application/x-www-form-urlencoded",
}
data = {"logo": ('logo1024x1024.png',open('/XXXXXX/XXXX/1024x1024.png','rb'),'image/png')}
res = requests.post(url=url,headers=headers,files=data)
print(url)
print(res.text)
result_json = json.loads(res.text)
code = result_json["code"]
message = result_json["message"]
return code, message

此时,从抓包工具中看到发送的请求结果是失败的,无法解析文件:

解决办法

后面直接把headers里面的Content-Type去掉,完美解决此问题:

def send_app_logo(token, appid):
headers = {
"Access-Token": token,
}
url = "XXXXXXXXXXXX"
data = {"logo": ('logo1024x1024.png',open('/XXXXXX/XXXXX/1024x1024.png','rb'),'image/png')}
res = requests.post(url=url,headers=headers,files=data)
print(url)
print(res.text)
result_json = json.loads(res.text)
code = result_json["code"]
message = result_json["message"]
return code, message

python发送post请求上传文件,无法解析上传的文件的更多相关文章

  1. Python发送http请求时遇到问题总结

    1.报错信息为“ERROR 'str' object has no attribute 'endwith'”,排查发现endswith方法名写错了,少了s,写成了 'endwith' if inter ...

  2. python发送网络请求

    1.使用urllib模块(使用不方便,建议使用第二种) get请求: res = urlopen(url) from urllib.request import urlopen url = 'http ...

  3. python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息

    背景介绍: 发送搜索请求时,需要用到登录接口返回值中的token值 代码实现: 登录代码: 搜索接口:

  4. go 发送post请求(键值对、上传文件、上传zip)

    一.post请求的Content-Type为键值对 1.PostForm方式 package main import ( "net/http" "net/url" ...

  5. requests模块--python发送http请求

    requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...

  6. 发送ajax请求实现上传图片显示在网页上

    <?php // 1,通过超全局变量来获取files[上传的图片名称] $file = $_FILES["files"] // 2,在通过strrchr来获取图片的格式 $e ...

  7. python发送post请求

    urllib2.urlopen() urlib2是使用各种协议完成打开url的一个扩展包.最简单的使用方式是调用urlopen方法,比如 def urlopen(url, data=None, tim ...

  8. python 发送POST请求

    #博客地址:https://blog.csdn.net/qq_36374896 import urllib.request import urllib.parse url = "http:/ ...

  9. 转载:python发送HTTP请求

    1. [代码]GET 方法 import httplib #----------------------------- conn = httplib.HTTPConnection("www. ...

随机推荐

  1. poj3728The merchant

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4800   Accepted: 1666 Desc ...

  2. FZOJ Problem 2150 Fire Game

                                                                                                        ...

  3. scroll与按钮的位置

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. configure.ac:3: error: Autoconf version 2.68 or higher is required

    configure.ac:3: error: Autoconf version 2.68 or higher is required 参考博客:https://blog.csdn.net/pretty ...

  5. C# DataSet与DataTable的区别和用法

    DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable.DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面. ...

  6. POJ 3171 区间覆盖最小值&&线段树优化dp

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4715   Accepted: 1590 D ...

  7. win10下ubuntu虚拟机互传文件

    前言 用过虚拟机的都知道在向linux传文件的时候总是会遇到各种问题 安装虚拟机的增强工具不好用,反正就是各种麻烦各种麻烦 准备-------方案一 使用专门的xshell可以直接链接到虚拟机,同时配 ...

  8. java excel导出(基于注解)

    小白,做日志只是为了方便自己查看,能帮到别人当然更好,不喜勿喷. 上代码 依赖: <dependency> <groupId>org.apache.poi</groupI ...

  9. SSL/TLS协议

    今天闲着给自己的网站申请了一个免费证书,顺便复习下SSL/TLS协议    (https 就是在http+ssl协议) SSL介绍: 安全套接字(Secure Socket Layer,SSL)协议是 ...

  10. 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。

    使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务.