您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

从客户的角度来看,这很容易。您可以使用httplib的低级别的界面- ,putrequestputheaderendheaderssend任何你想在任何大小的块服务器- to发送。

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

如果您事先知道文件的总大小,则只需添加Content-Length标头,服务器将在读完这么多字节后停止读取您的请求正文。代码可能看起来像这样。

import httplib
import os.path

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

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

python 2022/1/1 18:36:40 有554人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶