问题描述
我的直觉不是。该request.post本质上受阻。但是我可能是错的,即使我是对的,我也很想弄清楚有什么替代方案。基本上,我有一个文件上传请求,可以在Firefox网络控制台中看到该文件,并以提取形式复制,然后使用request.post在python中进行复制。
工作正常。有条理地上传文件。
但是我想要一个进度条。
我正在使用python3-wget软件包下载它,它具有进度条。整齐。快速浏览内部,似乎有点麻烦,使用urllib而不是request包。这是我正在使用的代码:
BaseURL = result["BaseURL"]
Signature = result["Signature"]
GoogleAccessId = result["AccessKey"]["Value"]
CacheControl = result["AdditionalBody"][0]["Value"]
Policy = result["PolicyBase64"]
ACL = result["ACL"]
KeyPrefix = result["KeyPrefix"]
Type = os.path.splitext(local_file)[1][1:]
Checksum = api.check_sum(local_file)
if Type:
Key = "{}{}/{}.{}".format(KeyPrefix,Type,Checksum,Type)
else:
Key = "{}{}/{}.{}".format(KeyPrefix,"unknown","unknown")
Size = os.path.getsize(local_file)
parts = [
('key',(None,Key)),('acl',ACL)),('policy',Policy)),('signature',Signature)),('GoogleAccessId',GoogleAccessId)),('Cache-control',CacheControl)),('Content-Type',MimeTypeOfFile)),('file',(os.path.basename(local_file),open(local_file,'rb'),MimeTypeOfFile))
]
heads = {"ngsw-bypass": "1","x-client-data": "somelongencodedstring"}
response = requests.post(BaseURL,files=parts,headers=heads)
-
result
由另一个提供所有上传内容的请求返回 此Google Cloud Service所需的详细信息(这是BaseURL所在的位置) 点)。 -
local_file
就是我要上传的文件的名称。 -
somelongencodedstring
是从外观上看是一种API密钥 从Firefox记录的提取请求中复制了它,并具有 在这里将其匿名化。
我希望做的是将最后一行(以及我需要用其备份的其他内容)替换为具有用于渲染进度条的回调的东西。
我可以看到Python中的wget实现使用了urllib.request.FancyURLopener
及其retrieve
方法,该方法的参数接受作为回调的函数。
我注定要深入研究urllib
的内部吗?还是request.post
可以为我做点什么?还是有其他可行的解决方案可以滑入request.post
的位置?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)