HttpClient 4.1不会一直返回主机值

时间:2011-02-26 14:27:10

标签: java httpclient

如果运行以下代码,您将看到完成后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());
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

Android代码?

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

我不是一个专家,也许这可能有所帮助。