Android:如何发出HTTP HEAD请求?

Dan*_*e B 6 android http-head

我想做一个简单的HTTP HEAD请求,没有keep-alive.

我怎么能在Android中做到这一点?

Dan*_*e B 9

使用HttpClient:

正如njzk2建议的那样,HttpClient()它非常简单:

HttpResponse response = new HttpClient().execute(new HttpHead(myUrl));
Run Code Online (Sandbox Code Playgroud)

但是,无法关闭连接存在问题.通常在HttpClient上,您可以使用以下命令获取实体:

HttpEntity entity = response.getEntity();
Run Code Online (Sandbox Code Playgroud)

然后你会得到来自实体的输入流

InputStream instream = entity.getContent();
...
instream.close();
Run Code Online (Sandbox Code Playgroud)

通过关闭输入流,连接将关闭.但是,在HEAD请求的情况下,实体似乎是null(可能是因为HEAD请求不在响应中返回正文),因此无法获取和关闭输入流,并且连接也不会关闭.

在他的答案的最后一个编辑中,njzk2建议使用AndroidHttpClient,这是一个更新的实现(API 8),HttpClient它实际上有一个close()方法.我没有用它,但我想它会正常工作.但是,正如Android开发团队建议的那样,HttpUrlConnection应该是首选的Android客户端.

使用HttpUrlConnection:

实际上,HEAD使用HttpUrlConnection并确保连接关闭似乎很容易:

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)


njz*_*zk2 1

简单地说:

HttpResponse response = new AndroidHttpClient().execute(new HttpHead(myUrl));
Run Code Online (Sandbox Code Playgroud)

通常,您将在多个连接中使用相同的连接AndroidHttpClient,然后调用close它。