【问题标题】:HttpClient redirection result is not visible in browserHttpClient 重定向结果在浏览器中不可见
【发布时间】:2014-12-08 05:30:00
【问题描述】:

我正在尝试使用 Apache Httpclient 4.3 重定向到“某些 url”。 当以下代码工作时,我得到“200 OK”状态,但浏览器没有任何变化。 此代码在 servlet 的 doGet() 方法中,我不想使用 response.sendRedirect()。

如何在浏览器中查看重新访问的网页 URL?

 String url = "some url";
   HttpClient instance = 
         HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();

 try {
    HttpResponse response = instance.execute(new HttpGet(url));
   } catch (IOException e) {
    e.printStackTrace();
   }

【问题讨论】:

  • 什么?为什么你会期望浏览器客户端发生任何事情?

标签: java servlets redirect browser httpclient


【解决方案1】:

根据您问题中的描述,这是您的堆栈:

浏览器向基于 Servlet 的服务器发送 HTTP 请求。基于 Servlet 的服务器使用 Apache HttpClient 向“某个 url”发送 HTTP 请求。 "some url" 以重定向 302 响应,HttpClient 由于其 LaxRedirectStrategy 而跟随该重定向。 "some url" 以其他一些 HTTP 响应进行响应。基于 Servlet 的服务器完成并以 200 OK 响应浏览器客户端。

浏览器客户端和您在 servlet 中使用的 Apache HttpClient 实例之间绝对没有关系

如何在浏览器中查看返回网页的 URL?

这没有意义。如果您想在浏览器中查看 URL,则需要通过浏览器向该 URL 发送请求,或者让 浏览器 跟随重定向。

【讨论】:

  • 感谢您的回复。 HttpClient 是否两次发送重定向请求,因为在 Fiddler 中我可以看到 2 个响应:第一个状态为 302,第二个状态为 200?
  • @Suro HTTP 处理一个请求,一个响应周期。因此,例如,客户端发送一个 HTTP 请求并收到一个 302 响应。它向 302 响应标头中的 Location URL 发送第二个 HTTP 请求,并收到 200 响应。
  • 感谢您的详细解释:)
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2021-04-09
  • 2014-09-16
  • 2016-03-30
  • 2016-05-01
  • 2023-03-27
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多