gpt4 book ai didi

java - HttpClient 4 - 如何捕获最后一个重定向 URL

转载 作者:IT老高 更新时间:2023-10-28 20:30:50 24 4
gpt4 key购买 nike

我有相当简单的 HttpClient 4 代码,它调用 HttpGet 来获取 HTML 输出。 HTML 返回的脚本和图像位置都设置为本地(例如 <img src="/images/foo.jpg"/>),所以我需要调用 URL 将它们设为绝对值(<img src="http://foo.com/images/foo.jpg"/>)现在问题来了——在调用过程中可能会有一两个 302 重定向,所以原来的 URL 不再反射(reflect) HTML 的位置。

鉴于我可能(或可能没有)拥有的所有重定向,我如何获得返回内容的最新 URL?

我看了HttpGet#getAllHeaders()HttpResponse#getAllHeaders() - 找不到任何东西。

编辑:HttpGet#getURI()返回原调用地址

最佳答案

这将是当前 URL,您可以通过调用

  HttpGet#getURI();

编辑:你没有提到你是如何做重定向的。这对我们有用,因为我们自己处理 302。

听起来您正在使用 DefaultRedirectHandler。我们曾经这样做过。获取当前 URL 有点棘手。您需要使用自己的上下文。以下是相关的代码片段,

        HttpGet httpget = new HttpGet(url);
HttpContext context = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpget, context);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
throw new IOException(response.getStatusLine().toString());
HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(
ExecutionContext.HTTP_REQUEST);
HttpHost currentHost = (HttpHost) context.getAttribute(
ExecutionContext.HTTP_TARGET_HOST);
String currentUrl = (currentReq.getURI().isAbsolute()) ? currentReq.getURI().toString() : (currentHost.toURI() + currentReq.getURI());

默认重定向对我们不起作用,因此我们进行了更改,但我忘记了问题所在。

关于java - HttpClient 4 - 如何捕获最后一个重定向 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com