Python 请求 - 上传 Zip 文件

Posted

技术标签:

【中文标题】Python 请求 - 上传 Zip 文件【英文标题】:Python Requests - Uploading a Zip file 【发布时间】:2019-05-12 14:00:19 【问题描述】:

我有一个需要上传的 zip 文件。当我使用 CURL 命令时,它正在上传它,但是当我使用 Python 请求尝试相同时,我得到HTTP 405 Method Not Allowed。 zip 文件通常在 500kb 左右。

卷曲命令 -

curl -u<username>:<password> -T /log/system/check/index.zip "<target URL>"

Python 脚本(尝试了 2 种不同的方法) -

1:

import requests
files = 'file': open('/log/system/check/index.zip', 'rb')
r = requests.post(url, files=files, auth=('<username>', '<password>'))

2:

import requests
fileobj = open('/log/system/check/index.zip', 'rb')
r = requests.post(url, auth=('<username>', '<password>'), files="archive": ("index.zip", fileobj))

我是否遗漏了一些明显的东西?

【问题讨论】:

那么curl 命令成功了吗? curl 联机帮助页说明了 -TIf this is used on an HTTP(S) server, the PUT command will be used. 因此,curl 使用的是 PUT,而不是 POST。您的端点是否允许POST 我现在尝试使用 PUT 并看到错误 - Tunnel connection failed: 503 Service Unavailable',不确定是否需要任何代理 但为了清楚起见,您列出的 curl 命令可以正常工作吗? 是的,它工作得非常好。它正在上传文件。 【参考方案1】:

也许这会对你有所帮助。

 with open(zipname, 'rb') as f:
uploadbase = requests.put('url',
                    auth=(base, pwd),
                    data=f,
                    headers='X-File-Name' : zipname, 
                                  'Content-Disposition': 'form-data; name="0"; filename="0"'.format(zipname), 
                                   'content-type': 'multipart/form-data')

the difference between put and post

【讨论】:

谢谢拯救我的一天【参考方案2】:

curl -T ... 使用 PUT 方法而不是 POST。 正如错误消息所说,您应该使用

r = requests.put(url, ...)

【讨论】:

我现在尝试使用 PUT 并看到错误 - Tunnel connection failed: 503 Service Unavailable',不确定是否需要任何代理,我是否遗漏了什么?

以上是关于Python 请求 - 上传 Zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

Python第一次做上传文件

node复制文件夹,压缩zip,上传

上传 ZIP 文件到 S3,使用 EC2 解压

python发送post请求上传文件,无法解析上传的文件

python请求上传文件

如何使用 python 请求上传文件?