使用post params上传文件

时间:2015-10-14 20:27:21

标签: python-3.x file-upload request http-post

我希望将文件发送到网址,其中包含一些邮件参数,例如“chat_id”,“标题”,文件必须发送为“照片”字段名称。
但我发现只有方法只发送没有文件的POST参数或只发送没有POST参数和自定义文件名参数的文件。
此代码仅发送params字段,但我还需要files字段。

from urllib import parse, request
...
files={'photo': open('file.jpg','rb')}          
params = parse.urlencode({'chat_id': chat_id, 'caption': 'test'})
#headers = {"Content-type": "multipart/form-data"}      

req = request.Request(url, params.encode('ascii'))
response = request.urlopen(req)
print(response.read())

Python 3.4.2

1 个答案:

答案 0 :(得分:1)

确定。我找到了解决方案 我安装了外部lib Requests: HTTP for Humans 现在我正在使用requests

import requests
...
url = 'https://api.telegram.org/bot'+self.token+'/sendPhoto' #'/sendmessage'
print('request to '+url+' with params '+chat_id+' ' + text)     

headers = {'Content-Type': 'multipart/form-data'}

files = {'photo': open('file.jpg', 'rb')}
params = {'chat_id': chat_id, 'caption': text}
r = requests.post(url,  files=files, params=params)     
print(r.text)