私はSpiderOakによるこのZipstreamモジュールをいじくり回してきました。これにより、基本的に、ディスクに何も書き込まずにファイルまたはフォルダーをストリーミングおよびzipできます。不規則なサイズのデータのチャンクが生成されます。
現在、投稿リクエスト内のフィールドfile
とフィールドを送信する必要があるファイルホスティングサイトにディレクトリをアップロードしようとしています。apikey
リクエストでは、次のように apikey の dict を作成する必要があります。
data = {'apikey': 'myapikey'}
また、zipstream 全体を文字列に読み取り、それをファイル エンコーディング dict に渡します。
files = {'file': ('mydir.zip', the_string_that_is_a_zipped_dir)}
次に、リクエストを発行します
r = requests.post(url, data=data, files=files).
これは正常に動作します。ただし、将来的にはより大きなものを転送したいと考えており、メモリ内のファイル全体を読み取ることは、そもそも悪い考えです。リクエストの高度なセクションで、ジェネレーターをデータ フィールドとして送信できることを見ましたが、API キーを送信できず、ヘッダーを手動で変更してコンテンツ タイプなどを設定する必要があるため、機能しません。また、次のように、API キーと zip ファイル ジェネレーターから辞書を作成しようとしました。
しかし、これは(予想どおり)失敗します。
マルチパートフォームデータのファイルの文字列を生成するジェネレーターを使用してリクエストをハックする方法はありますか?