0

URL を呼び出し、応答を取得し、エンティティがある場合はそのエンティティを転送する、かなり単純なコードがいくつかあります。

問題は、エンティティ コンテンツの長さのテストを追加したときに発生します。プロキシ経由で呼び出しを実行すると、Content-Length ヘッダーが適切に設定されていることがわかります。

Content-Disposition: attachment; filename="something.zip";
Content-Length: 12390600
Content-Type: application/zip

したがって、私のコードでは次のことを確認します。

HttpResponse response = _client.execute(request);
HttpEntity entity = response.getEntity();

if (entity != null && entity.getContentLength() > 0) {
    handleEntity(entity);
}

応答を見ると、コンテンツの長さを除いて、予想されるすべてのヘッダーがそこにあります。エンティティ オブジェクトを確認すると、getContentLength()呼び出しに対して -1 が返されます。ドキュメントでは、コンテンツの長さが Long.MAX_VALUE を超えると負の数が返されますが、ここではそうではありません。

そのため、今のところこのチェックを削除しましたが、このコンテキストでの意味を理解したいと思います. ドキュメントは、「既知の場合」コンテンツの長さを返すという警告を追加しますが、この場合、既知であるべきであるように見えます。

ここで何が起こっているのかについての洞察をありがとう...

4

1 に答える 1

1

HTTP メッセージ コンテンツの長さと、マルチパート コンテンツ ボディ内の個々の MIME ボディ パーツの長さを混同していると思われます

于 2013-07-23T12:13:34.697 に答える