起因
为了测试企业微信上传临时素材接口,我写了一段python脚本,使用的是requests 库,按照官方接口说明:
要构造相应表单的栏位,才能指定上传后文件的显示名称,于是我测试脚本如下:
然而并没什么用,上传后还是会以原始文件命来命名。 为什么不行?研究一下
测试和分析
1.首先按下面的方式,不指定任何其它参数,打印出request,发现请求里的name和filename。
2.扩展成 tuple 方式,指定filename,发现功改变了请求里的 filename 了,所以结论是 request库
会以 file 参数的结构来构造 name和filename 表单参数。
测试代码如下:
with open(imagepath, 'rb') as f:
extname = os.path.splitext(imagepath)[-1]
#fs = {'name1':('filename1'+extname, f)}
fs = {'name1': f}
response = requests.post(url, files=fs)
print(response.request.body,response.request.headers)
# print(ret)
if response.status_code == 200:
retDict = response.json()
print(retDict)
因为以前一直也没仔细研究request库,只是拿来用过,趁碰到这个问题,打开它的定义文件里看了一下代码说明。
原来,所用的 post , get 等等方法,其着都是由 request 方法派生的,实际最终都是调用的request方法。
其它着法其实也只是把参数带给 request方法,request方法的说明非常清晰。如下,关于files参数有几种结构形式。其它参数的说明看完也自然清楚了。