栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过Python中的HTTP从客户端到服务器流未知大小的数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过Python中的HTTP从客户端到服务器流未知大小的数据

从客户的角度来看,这很容易。您可以使用

httplib
的低级别的界面-
putrequest
putheader
endheaders
send
任何你想在任何大小的块服务器-
to发送。

但是,您还需要指出文件的结束位置。

如果您事先知道文件的总大小,则只需添加

Content-Length
标头,服务器将在读完这么多字节后停止读取您的请求正文。代码可能看起来像这样。

import httplibimport os.pathtotal_size = os.path.getsize('/path/to/file')infile = open('/path/to/file')conn = httplib.HTTPConnection('example.org')conn.connect()conn.putrequest('POST', '/upload/')conn.putheader('Content-Type', 'application/octet-stream')conn.putheader('Content-Length', str(total_size))conn.endheaders()while True:    chunk = infile.read(1024)    if not chunk:        break    conn.send(chunk)resp = conn.getresponse()

如果您事先不知道总大小,则理论上的答案是分块传输编码。问题是,尽管它广泛用于响应,但似乎对请求的要求不高(尽管定义明确)。库存的HTTP服务器可能无法立即使用它。但是,如果服务器也处于您的控制之下,则可以尝试从请求正文中手动解析这些块,然后将它们重新组装到原始文件中。

另一种选择是

Content-Length
通过同一连接将每个块作为单独的请求(带有)发送。但是您仍然需要在服务器上实现自定义逻辑。此外,您需要在请求之间保持状态。

新增2012-12-27。
有一个nginx模块,可将分块的请求转换为常规请求。只要您不需要真正的流式传输(在客户端完成发送请求之前开始处理请求),它可能会有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号