通过POST发送文件而不使用Python中的Content-Disposition

时间:2017-04-19 15:49:54

标签: python request content-disposition

我在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客户端和我的客户端读取(即使看起来我们发送了一些不同的消息)

2 个答案:

答案 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())