当前位置: 首页 > 面试题库 >

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

归星驰
2023-03-14
问题内容

我有相当简单的HttpClient 4代码,该代码调用HttpGet来获取HTML输出。HTML返回的脚本和图像位置均设置为本地(例如<img src="/images/foo.jpg"/>),因此我需要调用URL使其变为绝对(<img src="http://foo.com/images/foo.jpg"/>)现在出现了问题-
在调用过程中可能会有一到两个302重定向,因此原始URL不再存在反映HTML的位置。

给定我可能(或可能没有)进行的所有重定向,如何获取返回内容的最新URL?

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

编辑:HttpGet#getURI()返回原始呼叫地址


问题答案:

那就是当前网址,您可以通过调用

  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());

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



 类似资料:
  • 可以按如下方式创建遵循重定向的客户端: 调用URL上的头请求后,如何检索最终的位置头?换句话说,我们如何将最终URL重定向到?

  • 我正在尝试用以下方法重定向无效的URL 我不想使用解决浏览器支持问题。 我正在使用grunt serve进行本地前端开发和封装,并在生产中与spring boot一起运行。

  • 问题内容: 在页面重定向(最好使用curl或wget)之后,我需要获取最终的URL。 例如, http://google.com 可以重定向到 http://www.google.com 。 内容很容易获得(例如),但是我只对最终URL(在前一种情况下为http://www.google.com)感兴趣。 仅使用Linux内置工具有什么方法可以做到这一点?(仅命令行) 问题答案: 的选项和sub变

  • 问题内容: 我接受了随机从并将其传递到一个方法,我创造,只有将捕获在进入最后4个字符。 我已经浏览了类引用库,并且发现了唯一真正的选项,它看起来像我想要的那样 我之前使用过一次,但是静态参数“不会改变”,但是对于此实现,我想使用随输入字符串的大小而变化的非静态参数。 到目前为止,这是我创建的方法,该方法是从IBAction 传递到其他地方的。 问题答案: 使用substringFromIndex方

  • 问题内容: 我想做的是 找出重定向之后的最后一个/最终URL是什么 。 我不希望使用cURL。 我想坚持使用纯PHP(流包装器)。 现在,我有一个URL(比如说http://domain.test),并且我使用get_headers()从该页面获取特定的标题。get_headers也将返回多个标题(请参见下面的 Edit )。有没有办法使用这些标头来构建最终URL?还是有一个PHP函数可以自动执行

  • 问题内容: 因此,我正在使用net / http包。我正在获取一个我肯定知道要重定向的URL。在到达最终网址之前,它甚至可能重定向了几次。重定向在后台自动处理。 有没有一种简单的方法来确定最终的URL是什么,而没有涉及在http.Client对象上设置CheckRedirect字段的棘手的解决方法? 我想我应该提一提我想出了一种解决方法,但这有点of脚,因为它涉及使用全局变量并在自定义http.C