我想做一个简单的HTTP HEAD请求,没有keep-alive.
我怎么能在Android中做到这一点?
解决方法
使用HttpClient:
正如njzk2建议的那样,使用HttpClient()它非常简单:
HttpResponse response = new HttpClient().execute(new HttpHead(myUrl));
但是,无法关闭连接存在问题.通常在HttpClient上,您将使用以下内容获取实体:
HttpEntity entity = response.getEntity();
然后你会得到来自实体的输入流
InputStream instream = entity.getContent(); ... instream.close();
通过关闭输入流,连接将关闭.
但是,在HEAD请求的情况下,实体似乎为空(可能是因为HEAD请求不返回响应中的主体),因此无法获取和关闭输入流,并且连接也不会关闭.
在他的答案的最后编辑中,njzk2建议使用AndroidHttpClient,这是HttpClient的最新实现(API 8),它实际上有一个close()方法.我没有用它,但我想它会正常工作.但是,正如Android开发团队所建议的那样,HttpUrlConnection应该是首选的Android客户端.
使用HttpUrlConnection:
实际上,使用HttpUrlConnection创建HEAD请求似乎很容易,并确保连接关闭:
HttpURLConnection urlConnection = null; System.setProperty("http.keepAlive","false"); try { URL url = new URL(stringUrl); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("HEAD"); urlConnection.getInputStream().close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (urlConnection != null) { urlConnection.disconnect(); } }