python发送post请求上传文件,无法解析上传的文件
前言
近日,在做接口测试时遇到一个奇葩的问题。
使用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请求上传文件,无法解析上传的文件的更多相关文章
- Python发送http请求时遇到问题总结
1.报错信息为“ERROR 'str' object has no attribute 'endwith'”,排查发现endswith方法名写错了,少了s,写成了 'endwith' if inter ...
- python发送网络请求
1.使用urllib模块(使用不方便,建议使用第二种) get请求: res = urlopen(url) from urllib.request import urlopen url = 'http ...
- python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
背景介绍: 发送搜索请求时,需要用到登录接口返回值中的token值 代码实现: 登录代码: 搜索接口:
- go 发送post请求(键值对、上传文件、上传zip)
一.post请求的Content-Type为键值对 1.PostForm方式 package main import ( "net/http" "net/url" ...
- requests模块--python发送http请求
requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...
- 发送ajax请求实现上传图片显示在网页上
<?php // 1,通过超全局变量来获取files[上传的图片名称] $file = $_FILES["files"] // 2,在通过strrchr来获取图片的格式 $e ...
- python发送post请求
urllib2.urlopen() urlib2是使用各种协议完成打开url的一个扩展包.最简单的使用方式是调用urlopen方法,比如 def urlopen(url, data=None, tim ...
- python 发送POST请求
#博客地址:https://blog.csdn.net/qq_36374896 import urllib.request import urllib.parse url = "http:/ ...
- 转载:python发送HTTP请求
1. [代码]GET 方法 import httplib #----------------------------- conn = httplib.HTTPConnection("www. ...
随机推荐
- [TJOI2017] 城市 (树的直径,贪心)
题目链接 Solution 这道题,调了我一晚上... 一直80分 >_<|| ... 考虑到几点: 分开任意一条边 \(u\) ,那么其肯定会断成两棵树. 肯定是分开直径上的边最优,否则 ...
- linux下安装firefox
首先检查系统有没有安装:rpm -qa|grep firefox 如果有安装,先删掉rpm -e * firefox不同版本下载:http://liulanmi.com/firefox 具体方法如下: ...
- git提交node-modules报文件名过长无法提交问题
当报如下错误时候 fatal: unable to stat 'node_modules/gulp-connect/node_modules/gulp-util/node_modules/datefo ...
- Linux 虚拟地址与物理地址的映射关系分析【转】
转自:http://blog.csdn.net/ordeder/article/details/41630945 版权声明:本文为博主(http://blog.csdn.net/ordeder)原创文 ...
- 断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天(非原创)
文章大纲 一.Hystrix基础介绍二.断路器Hystrix简单使用三.自定义Hystrix请求命令四.Hystrix的服务降级与异常处理五.Hystrix的请求缓存与请求合并六.Hystrix仪表盘 ...
- spring容器初始化bean和销毁bean之前进行一些操作的定义方法
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种,通过在xml中定义init-method和destory-method方法 第二种, ...
- Ext grid单元格编辑时获取获取Ext.grid.column.Column
item2.width = 80; //item2.flex = 1; item2.align = 'center'; item2.menuDisabled = true; //禁止显示列头部右侧菜单 ...
- JDK/Java SE官方文档汇总
JDK一般是指Java SE. 1.5:https://docs.oracle.com/javase/1.5.0/docs/ 6:https://docs.oracle.com/javase/6/do ...
- Life of an Oracle I/O: tracing logical and physical I/O with systemtap
https://db-blog.web.cern.ch/blog/luca-canali/2014-12-life-oracle-io-tracing-logical-and-physical-io- ...
- Android Service实现双向通信(一)
首先,大概来总结一下与Service的通信方式有很多种: 通过BroadCastReceiver:这种方式是最简单的,只能用来交换简单的数据: 通过Messager:这种方式是通过一个传递一个Mess ...