让Jetty HttpClient跟踪重定向

让Jetty HttpClient跟踪重定向,jetty,jetty-8,Jetty,Jetty 8,我有一个程序,它使用Jetty版本8发送http post。我的响应处理程序可以工作,但我得到了http响应代码303,这是一个重定向。我读到一条评论说jetty 8支持遵循这些重定向,但我不知道如何设置它。我试着查看了,找到了RedirectListener类,但没有关于如何使用它的详细信息。我试图猜测如何编写代码,但没有成功,所以我被卡住了。感谢您的帮助 编辑 我查看了jetty源代码,发现只有当响应代码为301或302时,它才会重定向。我能够覆盖重定向侦听器,使其也能够处理RESTE代码3

我有一个程序,它使用Jetty版本8发送http post。我的响应处理程序可以工作,但我得到了http响应代码303,这是一个重定向。我读到一条评论说jetty 8支持遵循这些重定向,但我不知道如何设置它。我试着查看了,找到了RedirectListener类,但没有关于如何使用它的详细信息。我试图猜测如何编写代码,但没有成功,所以我被卡住了。感谢您的帮助

编辑

我查看了jetty源代码,发现只有当响应代码为301或302时,它才会重定向。我能够覆盖重定向侦听器,使其也能够处理RESTE代码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);
   }
}
很简单

HttpClient=newhttpclient();
client.registerListener(RedirectListener.class.getName());
client.start();
//在这里兑换吗
ContentExchange get=newcontentexchange();
setMethod(HttpMethods.get);
get.setURL(requestURL);
client.send(get);
int state=get.waitForDone();
int status=get.getResponseStatus();
如果(状态!=HttpStatus.OK\u 200)
抛出新的RuntimeException(“获取内容失败:+状态”);
字符串内容=get.getResponseContent();
//对内容做点什么
client.stop();

我一直在努力让它工作。我需要实现自己的重定向侦听器吗?使用默认实现时,仍会使用303调用我的onResponseComplete处理程序,但我从未得到最终响应。请尝试将HttpClient.setMaxRedirects(int)调整为更高的数字。也可能是您看到的重定向不符合303+
位置:
响应头标准(就像一些url缩短器一样)。谢谢Joakim!我发现是什么使我的代码无法工作。一旦我确定你的例子很有效。