gpt4 book ai didi

python - 如何使用 Python Requests 和 Clint 监控 HTTP PUT 上传的进度

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:45 25 4
gpt4 key购买 nike

我正在编写一个简单的命令行应用程序 - transfer.py - 允许从 transfer.sh 服务上传和下载文件作为学习练习,使用 HTTP 的“请求”库。多亏了这里的一些答案,我才能够使用 python-clint 和 python-requests 实现一个进度条来监控文件下载 - 所说的功能正在被看到 here .

无论如何,当我试图实现相同类型的进度条来监控上传时,我感到非常非常迷茫——它使用 HTTP PUT。我从概念上理解它应该非常相似,但由于某种原因无法弄清楚,如果有人能指出我正确的方向,我将不胜感激。我尝试了一些使用多部分编码器等的方法,但这些方法导致文件在上传过程中被破坏(服务接受原始 PUT 请求,多部分编码似乎把它弄乱了)。

最终目标是编写一个脚本,使用随 secret 钥对要上传的文件进行 AES 加密,将其上传到服务,并打印一个链接 + 加密 key ,可供 friend 用来下载/解密文件,主要是为了好玩和填补我的 python 中的一些知识空白。

最佳答案

我建议您使用 requests_toolbelt使用 clint.textui.progress 模块。我找到了这段代码。

from clint.textui.progress import Bar as ProgressBar
from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor

import requests


def create_callback(encoder):
encoder_len = encoder.len
bar = ProgressBar(expected_size=encoder_len, filled_char='=')

def callback(monitor):
bar.show(monitor.bytes_read)

return callback


def create_upload():
return MultipartEncoder({
'form_field': 'value',
'another_form_field': 'another value',
'first_file': ('progress_bar.py', open(__file__, 'rb'), 'text/plain'),
'second_file': ('progress_bar.py', open(__file__, 'rb'),
'text/plain'),
})


if __name__ == '__main__':
encoder = create_upload()
callback = create_callback(encoder)
monitor = MultipartEncoderMonitor(encoder, callback)
r = requests.post('https://httpbin.org/post', data=monitor,
headers={'Content-Type': monitor.content_type})
print('\nUpload finished! (Returned status {0} {1})'.format(
r.status_code, r.reason
))

关于python - 如何使用 Python Requests 和 Clint 监控 HTTP PUT 上传的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com