0

org.apache.httpcomponents バージョン 4.23 の httpclient を使用して、scala で http リクエストを実行しようとしています。特に、メモリ内の大きな (~100Mb) バイト配列をコピーしないようにするために、InputStreamEntity を使用して要求を作成するプットを実行したいと考えています。スニペットは次のとおりです。

val req = new HttpPut(url)
req setEntity new InputStreamEntity(contentStream, -1/*contentlength*/)
val client = new DefaultHttpClient(connManager, httpParams)
val resp = client execute req

コード url では、connManager、httpParams が別の場所で定義されています。コードの結果は、目的の場所にコンテンツのないファイルが作成されます。3 バイトの contentStream でテストしています。コンテンツの長さを引数として明示的に 3 に設定して InputStreamEntity を作成すると、コードは正しい方法でファイルを作成します。本番環境では正当な理由から、ストリームの長さがわからないため、負の数を使用して、InputStreamEntity の API によって通知されるように、ストリームの最後に到達するまでストリーム全体が送信されるようにします。私は何を間違っていますか?コンテンツの長さを明示的に設定しないと、空のファイルが表示されるのはなぜですか?

4

1 に答える 1

1

content-length を設定しないと、HTTP クライアントがチャンク転送エンコーディングに切り替わります

これが機能するには、投稿先の http サーバーが HTTP 1.1 に準拠している必要があります。それは...ですか ?

于 2013-03-14T08:22:23.080 に答える