Java HttpClient 4.1并不总是返回主机值

Java HttpClient 4.1并不总是返回主机值,java,httpclient,Java,Httpclient,如果运行以下代码,您将看到URI在完成时主机的值为“null”。这是无效的!在执行请求后,它应该始终具有URI 我试图在请求页面后从上下文中获取当前页面(以防发生重定向) 我为这一混乱道歉。我提到重定向是因为我认为它可以更容易地说明我的问题。下面的代码应该适用于重定向的页面和未重定向的页面 插上你最喜欢的网站,没关系。最终的解决方案必须适用于任何站点。。。那些被重定向的和那些没有被重定向的 我错过了什么 public static void main(String args[]) throws

如果运行以下代码,您将看到URI在完成时主机的值为“null”。这是无效的!在执行请求后,它应该始终具有URI

我试图在请求页面后从上下文中获取当前页面(以防发生重定向)

我为这一混乱道歉。我提到重定向是因为我认为它可以更容易地说明我的问题。下面的代码应该适用于重定向的页面和未重定向的页面

插上你最喜欢的网站,没关系。最终的解决方案必须适用于任何站点。。。那些被重定向的和那些没有被重定向的

我错过了什么

public static void main(String args[]) throws ClientProtocolException, IOException
{
    HttpParams httpParams = new BasicHttpParams();
    HttpClient httpclient = new DefaultHttpClient(httpParams);
    HttpGet httpGet = new HttpGet("http://www.google.com/");
    HttpContext context = new BasicHttpContext();
    httpclient.execute(httpGet, context);
    HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);
    System.out.println("New URI host (why is it null?): " + currentReq.getURI().getHost());
}
Android代码

为什么主要是代码?我认为除了JavaSE之外,程序中不应该有main方法。 HttpGet已经是HttpUriRequest对象,为什么不使用它呢

我不是专家,也许这会有帮助。

来自文档(http://hc.apache.org/httpcomponents-client-ga/tutorial/html/httpagent.html)


谁说过Android?这是一个示例程序来演示这个bug。而且,它与Android没有任何关系。。。普通的旧爪哇语。我想在请求发出后获取“当前页面”,以防请求的页面包含随后发生的重定向。谷歌已经将Apache HttpCore HttpClient“借用”到Android SDK,因为它在ASF2.0下获得了许可,允许他们自由地这样做。我正在尝试获取新的URI-当前URI。如果你用'pttp://boards.cityofheroes.com/register.php'它会将您重定向到'pttps://boards.cityofheroes.com/register.php'请注意https而不是http。我需要去pttps://boards.cityofheroes.com/register.php 因为它是“当前”页面。@bigleftie:您提供的URL不执行HTTP重定向。它执行某种基于javascript的重定向。HTTP客户端永远不会自动处理此问题。我用
http://app.portasigma.com
(它将正确的http重定向到
https://
…)并且确实有效
DefaultHttpClient httpclient = new DefaultHttpClient();

HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost:8080/"); 
HttpResponse response = httpclient.execute(httpget, localContext);
// here:
HttpHost target = (HttpHost) localContext.getAttribute(
        ExecutionContext.HTTP_TARGET_HOST);