0

Jetty バージョン 8 を使用して http 投稿を送信するプログラムがあります。応答ハンドラーは機能しますが、リダイレクトである http 応答コード 303 が返されます。jetty 8 がこれらのリダイレクトに従うことをサポートしているというコメントを読みましたが、設定方法がわかりません。javadocsを調べてみたところ、 RedirectListener クラスが見つかりましたが、使用方法の詳細はありません。コーディング方法を推測しようとしてもうまくいかなかったので、行き詰まっています。すべての助けに感謝します!

編集

jetty のソース コードを調べたところ、応答コードが 301 または 302 の場合にのみリダイレクトされることがわかりました。RedirectListener をオーバーライドして、repose コード 303 も処理できるようにすることができました。その後、Joakim のコードは完全に機能します。

public class MyRedirectListener extends RedirectListener
{
   public MyRedirectListener(HttpDestination destination, HttpExchange ex)
   {
      super(destination, ex);
   }

   @Override
   public void onResponseStatus(Buffer version, int status, Buffer reason)
       throws IOException
   {
      // Since the default RedirectListener only cares about http
      // response codes 301 and 302, we override this method and
      // trick the super class into handling this case for us.
      if (status == HttpStatus.SEE_OTHER_303)
         status = HttpStatus.MOVED_TEMPORARILY_302;

      super.onResponseStatus(version,status,reason);
   }
}
4

1 に答える 1

1

十分に単純

HttpClient client = new HttpClient();
client.registerListener(RedirectListener.class.getName());
client.start();

// do your exchange here
ContentExchange get = new ContentExchange();
get.setMethod(HttpMethods.GET);
get.setURL(requestURL);

client.send(get);
int state = get.waitForDone();
int status = get.getResponseStatus();
if(status != HttpStatus.OK_200)
   throw new RuntimeException("Failed to get content: " + status);
String content = get.getResponseContent();

// do something with the content

client.stop();
于 2013-03-27T15:46:29.380 に答える