Basecamp API ドキュメントによると、コンテンツ タイプを application/octet-stream に設定し、リクエスト ボディにファイルのバイナリ コンテンツを含む HTTP POST を使用してファイルをアップロードする必要があります ( http://developer.37signals.com/basecamp/を参照) 。 . 全体をメモリに読み込むのではなく、ファイルをストリーミングしたいと思います。Python 2.7 を使用しています。
いくつかの可能性が見えます:
- これは、低レベルのソケット API を使用して行います。
- ファイル ストリーミングを処理するには、 Poster ( http://atlee.ca/software/poster/ )で urllib2 を使用します。ただし、Poster を使用すると、ファイル ストリーミング用の特別なオープナーを登録できます。私はすでに、独自のオープナーを明示的に使用して (build_opener に渡します)、Basecamp サーバーでの認証を処理しています。また、ポスターのドキュメントはフォームデータの投稿についてのみ説明しており、オクテットストリームを処理できるかどうかはまだわかりません(ソースコードをまだ読んでいます)。
- httplib を使用します。これにより、POST データのより低レベルの処理が可能になるように見えます (そのため、octet-stream を使用できます) が、ファイルをストリーミングする簡単な方法はまだわかりません。
Python: HTTP Post a large file with streamingを見つけましたが、フォーム データ形式を使用しない限り、httplib (!) にパッチを適用する必要があるように思えます。その投稿は1年前のものなので、今はもっと良い方法があることを願っています.
現在、Poster のように独自の mixin を作成することを検討していますが、これは本当に難しいのでしょうか? 比較的標準的なユースケースのように思えるものを処理する簡単な方法はありませんか?