我目前正在对 HTTP 请求使用 Python请求,但由于 API 的限制,我无法继续使用该库。
我需要一个库,它允许我以类似流文件的方式编写请求正文,因为我将发送的数据不会立即可用,而且我想尽可能多地节省内存提出请求时。是否有一个易于使用的库允许我发送这样的 PUT 请求:
request = HTTPRequest()
request.headers['content-type'] = 'application/octet-stream'
# etc
request.connect()
# send body
with open('myfile', 'rb') as f:
while True:
chunk = f.read(64 * 1024)
request.body.write(chunk)
if not len(chunk) == 64 * 1024:
break
# finish
request.close()
更具体地说,我有一个线程可以使用。使用这个线程,当我通过网络接收流时,我会收到回调。本质上,这些回调看起来像这样:
class MyListener(Listener):
def on_stream_start(stream_name):
pass
def on_stream_chunk(chunk):
pass
def on_stream_end(total_size):
pass
我需要在方法中创建我的上传请求,在on_stream_start
方法中上传块on_stream_chunk
,然后在方法中完成上传on_stream_end
。因此,我需要一个支持write(chunk)
类似以下方法的库:
class MyListener(Listener):
request = None
def on_stream_start(stream_name):
request = RequestObject(get_url(), "PUT")
request.headers.content_type = "application/octet-stream"
# ...
def on_stream_chunk(chunk):
request.write_body(chunk + sha256(chunk).hexdigest())
def on_stream_end(total_size):
request.close()
该requests
库支持读取类似文件的对象和生成器,但不支持写出请求:拉而不是推。是否有一个库可以让我将数据向上推送到服务器?