前言

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

使用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. java面试题之@Autowired和@Resource的区别

    @Autowired和@Resource的区别: 1.都可以用来装配bean,都可以写在字段或者方法上: 2. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果允许为nul ...

  2. 在SpringBoot中对SpringSecurity的基本使用

    参考文献: Spring Security Architecture What is authentication in Spring Security? Spring Security是一个能够为基 ...

  3. Java-Pi的几种实现

    1.无穷级数计算 p = 1 - 1/3 + 1/5 -1/7+..... π=4p 2.使用 Nilakantha 级数 π = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7 ...

  4. net9:磁盘目录文件保存到XML文档及其XML文档的读写操作,以及绑定XML到treeview

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] directorytoxml类: using System;using System.Data;using Sys ...

  5. http client transfer

    背景 在平时工作中我偶尔会写一些脚本监控HTTP接口的健康状况,基本上都是发送HTTP GET或HTTP POST请求,然后检测响应内容.但一直用的是WebClient和HttpWebRequest, ...

  6. python作为计算器(数学用法)

    1.基本的加减乘除与取余运算 >>> print(5+10) 15 >>> print(5-10) -5 >>> print(5*10) 50 & ...

  7. 标准C程序设计七---51

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  8. 14深入理解C指针之---指针与内存分配

    一.内存的含义 1.定义:物理内存是固定,逻辑内存是非常灵活的 2.特征: 1).逻辑内存最终必须映射到物理内存才能作用 2).逻辑内存每次映射可能到不同的物理内存 3).逻辑内存与物理内存的链接通过 ...

  9. Codeforces 919 B. Perfect Number

      B. Perfect Number   time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  10. luogu P1140 相似基因

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...