我在Python中使用requests
通过POST发送文件。
我的代码如下所示:
headers = {'Content-Type': 'application/x-tar',
'Content-Length': tar_size}
r = requests.post(server,
files={"file": (tar_name, open(tar_name, 'rb'))},
headers=headers)
在另一个客户端(用C语言编写)的同一台服务器上,文件的发送方式相同。当读取body_file(webob stuff see here http://docs.webob.org/en/stable/api/request.html)时,从C客户端读取文件,但是从Python客户端读取实际文件:
--2a95cc93056b45e0b7c3447234788e29
Content-Disposition: form-data; name="file"; filename="filename.tar"
有没有办法阻止我的客户发送这些东西?或者某种方式如何修复服务器,以便它可以从C客户端和我的客户端读取(即使看起来我们发送了一些不同的消息)
答案 0 :(得分:1)
好的,我能够解决这个问题。如果有人遇到同样的问题,我会在这里发布我的解决方案。
解决方案是使用准备好的请求(http://docs.python-requests.org/en/master/user/advanced/#prepared-requests) 然后我可以以我需要的形式将数据放入正文。我的代码现在看起来像这样:
headers = {'Content-Type': 'application/x-tar',
'Content-Size': tar_size}
req = requests.Request('POST',
server,
headers)
prepped = req.prepare()
with open(tar_name, 'rb') as f:
prepped.body = fl.read(tar_size)
s = Request.Session()
r = s.send(prepped,
stream=True)
答案 1 :(得分:0)
我在POST正文中遇到不需要的Content-Disposition
时遇到了同样的问题。我是这样解决的:
requests.post(server, headers=headers, data=open(myFile, 'rb').read())