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