【发布时间】:2017-01-26 20:16:12
【问题描述】:
我正在尝试使用 python 中的请求模块上传带有 PUT 的文件。
我的代码是这样的:
with open(file, 'rb') as payload:
r = requests.put(url, data=payload, auth=('username', 'password'))
文件已创建,我收到响应 200,但它有 0 个字节。如果我没有做错什么,我怀疑我遇到了错误here。
是这样吗?如果是,我可以尝试任何解决方法吗?
我也尝试过使用 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 大小的文件)。 requests 模块也会出现同样的问题吗?
[编辑] 一些额外的信息。
接收 PUT 的服务正在 ESXi 管理程序上运行。它有一个功能,如果您发出经过身份验证的 PUT 请求,它会将请求的文件存储在 /tmp 中。服务器端正在工作(使用执行相同工作的 perl 脚本以及 curl 对其进行了测试)。
上传的文件是一个 .tgz 文件,位于我的本地文件系统中,url 格式为"http://esx-server/tmp/file.tgz"。
【问题讨论】:
-
什么服务正在接收这个 PUT?文件在哪里创建?
-
尝试将
data更改为files并传递{'file': payload}。 -
@DavidCullen我已经试过了,还是不行
标签: python python-requests put httplib2