現在、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()
より具体的には、作業するスレッドが 1 つあります。このスレッドを使用して、ネットワーク経由でストリームを受信すると、コールバックを受信します。基本的に、これらのコールバックは次のようになります。
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
用のファイルのようなオブジェクトとジェネレーターをサポートしていますが、要求を書き出すためのものはサポートしていません: プッシュではなくプルです。データをサーバーにプッシュできるライブラリはありますか?