我原谅自己......我是一个HTTP菜鸟......但我需要创建一个python脚本,它接收一个文件并将其上传到包含附加数据的块中的服务器。
编辑:我只想上传一个文件...但是要打成块
所以我开始研究并遇到了pycurl
这似乎相当复杂。所以我继续requests
看起来非常好看和直观。
基本上我让它在部分工作......但是......并非所有这些都合并在一起:)。
我已经看到我可以使用生成器来提供我的数据块。棒极了!但我也需要发送(对不起......我的词汇量,当谈到那种东西是非常有限的)多部分界限???包含JSON信息的其他字段......
所以我的要求应该是这样的:
POST / HTTP/1.1
Host: some server
Content-Type: multipart/form-data;
Connection: Keep Alive
Transfer-Encoding: chunked
--boundary
Content-Disposition: form-data; name="Name of my field"
Content-Type: application/JSON; charset=utf-8
Content-Transfer-Encoding: 8bit
{"Some" : "content", "in" : "here"}
--boundary
Content-Disposition: form-data; name="My File"
Content-Type: audio/mpeg
Content-Transfer-Encoding: binary
... chunk 1 ....
--boundary
Content-Disposition: form-data; name="My File"
Content-Type: audio/mpeg
Content-Transfer-Encoding: binary
... chunk 2 ....
and so on...
我想我可以使用生成器创建分块上传。而且我还认为我可以使用file=
选项创建非文件边界。
但问题是我不能同时使用两者:(而且当我使用我的发明者时,我无法定义我的块的Content-Type
,也不能定义名称......
再次......对不起我的不良词汇:)
非常感谢任何帮助
答案 0 :(得分:1)
import requests
import json
#from here http://stackoverflow.com/a/23816211/642096
def pretty_print_POST(req):
"""
At this point it is completely built and ready
to be fired; it is "prepared".
However pay attention at the formatting used in
this function because it is programmed to be pretty
printed and may differ from the actual request.
"""
print('{}\n{}\n{}\n\n{}'.format(
'-----------START-----------',
req.method + ' ' + req.url,
'\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
req.body,
))
url = 'http://httpbin.org/post'
data = {'input_name': json.dumps({
'json': 'here'
})}
files = {
'file1': ('doc.txt', open('/tmp/doc.txt', 'rb'), 'text/plain'),
'file2': ('doc2.html', open('/tmp/doc2.html', 'rb'), 'text/html'),
}
r = requests.post(url, data=data, files=files)
pretty_print_POST(r.request)
print r.text