Python请求PUT方法创建一个零字节文件

Python请求PUT方法创建一个零字节文件,python,python-requests,put,httplib2,Python,Python Requests,Put,Httplib2,我正在尝试使用python中的请求模块上传一个带有PUT的文件 我的代码是: with open(file, 'rb') as payload: r = requests.put(url, data=payload, auth=('username', 'password')) 文件被创建,我得到一个200字节的响应,但是它有0个字节。如果我没有做错什么,我怀疑我遇到了错误 是这样吗?如果是的话,我有什么可以尝试的解决方法吗 我也在httplib2库中尝试过同样的方法 with ope

我正在尝试使用python中的请求模块上传一个带有PUT的文件

我的代码是:

with open(file, 'rb') as payload:
    r = requests.put(url, data=payload, auth=('username', 'password'))
文件被创建,我得到一个200字节的响应,但是它有0个字节。如果我没有做错什么,我怀疑我遇到了错误

是这样吗?如果是的话,我有什么可以尝试的解决方法吗

我也在httplib2库中尝试过同样的方法

with open(file, 'rb') as payload:
    h = httplib2.Http(".cache")
    h.add_credentials('user', 'pass')
    resp, content = h.request(url, "PUT", body=payload)
但是请求永远挂起(再次创建一个0大小的文件)。请求模块是否也存在同样的问题

[编辑]一些额外信息

接收PUT的服务正在ESXi虚拟机监控程序上运行。它有一个函数,如果您发出授权PUT请求,它会将请求文件存储在/tmp中。服务器端正在工作(使用perl脚本进行测试,该脚本执行相同的任务,还使用curl进行测试)


上传的文件是一个.tgz文件,它位于我的本地文件系统中,url的格式为
”http://esx-server/tmp/file.tgz“

因此,似乎确实存在某种缺陷

我的解决方案是使用urllib2。它不像请求那样“干净”。但还是比我想象的要好

我现在的工作代码是:

import urllib2
from base64 import b64encode

with open(source, 'rb') as file:
    data = file.read()
request = urllib2.Request(url)
request.add_data(data)
request.add_header('Authorization', 'Basic ' + b64encode(username + ':' + password))
request.get_method = lambda: "PUT"
r = urllib2.urlopen(request)

接收此PUT的服务是什么?正在创建的文件在哪里?请尝试将
数据
更改为
文件
并传递
{'file':payload}
@DavidCullenI我已经尝试过了,但仍然不起作用