在DefaultRedirectHandler.getLocationURI回调中添加请求头

3
我有以下情况:
Android HttpClient被重定向到备用位置,重定向URL返回一个特定的URL参数,该参数必须作为额外的HTTP标头在重定向请求中传播。干涉的唯一方法是覆盖DefaultRedirectHandler.getLocationURI处理程序。 现在我的问题是:如何在DefaultRedirectHandler.getLocationURI处理程序内获取重定向请求的HTTP标头并将其添加到重定向请求中?
public URI getLocationURI(HttpResponse response, HttpContext context)

我可以修改即将发出的请求。
2个回答

2

您需要创建一个 RedirectHandler 实现,并覆盖 getLocationURI() 方法。您可以通过以下方式获取重定向 URL:

    Header locationHeader = response.getFirstHeader("location");
    String location = locationHeader.getValue();

location中提取您的URL参数,然后您就可以通过以下方式获取HttpRequest
    BasicHttpRequest request = (BasicHttpRequest) context.getAttribute(
                            ExecutionContext.HTTP_REQUEST);
    header.addHeader();

谢谢回复,我很可能已经提到了我已经尝试过的所有方法,但除了中断请求重定向并手动创建全新请求之外,没有任何方法能够奏效。你的建议是我的第一次尝试,它应该是HttpUriRequest request = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST); 但实际上它并没有起作用,ExecutionContext.HTTP_REQUEST指的是原始请求而不是输出请求。正如我所说,我知道如何手动进行重定向,但我正在寻找更优雅的解决方法。 - Denis Voloshin

0
我发现唯一可行的修改重定向请求的方法是在原始请求中断并手动创建新请求。
  RedirectHandler and overwrite getLocationURI()

原始请求被中断并抛出异常

 IllegalStateException

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接