2017-08-01 3 views
0

http post要求を別のサーバー(URLと一部のヘッダーを変更するだけ)にリダイレクトし、この目的でサーブレットを使用します。 サーブレットでは、私はHttpClientを使用してリクエストを送信し、応答を得ています。 問題は、これらの操作が投稿要求全体をターゲットに送信するかどうかです。 :HttpClientを要求httpservletrequestを使用してhttp投稿を傍受する

  • し、このように要求エンティティでのHttpServletRequest#InputStreamを置くに

    1. コピーHttpServletRequestのヘッダ:

      HttpEntityエンティティ=新しいInputStreamEntity(httpServletRequest.getInputStream()、someContentType)。

    つまり、リクエスト=ヘッダ+入力ストリームですか?もしそうでなければ、他に何をコピーすべきですか?

  • 答えて

    0

    ただ、専門用語については、同じページ上にあるように:

    1. リダイレクトは別のURLに要求元の送信についてです。これはあなたが説明しているものではありません。
    2. フォワードは、リクエスト発信者が何も知らない別の内部URLに行きます。発信者の視点からは、リクエストされたURLから応答が来ています。これはあなたのサンプルコードがしようとしているものではありません
    3. あなたのコードは発信者の要求処理の一部としてreuqestsをやっています。これはあなたのコードがapache httpclientのような特定のフレームワークを使っているようです。しかし、元のリクエストから入力ストリームを再利用することで、そのようにしようとしています。

    リクエストにヘッダーを追加する場合、リダイレクトはafaikのオプションではありません。 別の外部URLに転送する場合、転送はオプションではありません。

    したがって、元のリクエスト処理の一部として、別のサイトに新しいhttpリクエストを行う必要があります。元の要求を処理して、必要な情報をすべて抽出しなければなりません(入力ストリームを再利用しようとはしません)。

    +0

    現在、私は入力ストリームを再利用しています。また、マルチパートの投稿とフォームの投稿でもOKです。しかし、このメカニズムがすべてのシナリオでOKであるかどうかはわかりません – redbeard1970

    関連する問題