Android开发怎么发送GET请求?

请先看以下Android开发的java代码:

    public String get(final String url) {
        final StringBuilder sb = new StringBuilder();
        FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                HttpURLConnection connection = null;
                BufferedReader reader = null;
                try {
                    URL requestUrl = new URL(url);
                    connection = (HttpURLConnection) requestUrl.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    if (connection.getResponseCode() == 200) {
                        InputStream in = connection.getInputStream();
                        reader = new BufferedReader(new InputStreamReader(in));
                        String line;
                        while ((line = reader.readLine()) != null) {
                            sb.append(line);
                        }
                        System.out.println(sb);

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (reader != null) {
                        reader.close();
                    }
                    if (connection != null) {
                        connection.disconnect();
                    }
                }
                return sb.toString();
            }
        });
        new Thread(task).start();
        String s = null;
        try {
            s = task.get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;
    }

以上代码执行后,只能获取到响应体,怎样获取完整返回内容(从响应头开始)。请各位大佬给出修改后的代码。

要获取完整的返回内容(包括响应头和响应体),你可以使用HttpURLConnectiongetHeaderFields()方法来获取所有的响应头字段。

以下是修改后的代码示例:

public String get(final String url) {
    final StringBuilder sb = new StringBuilder();
    FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
        @Override
        public String call() throws Exception {
            HttpURLConnection connection = null;
            BufferedReader reader = null;
            try {
                URL requestUrl = new URL(url);
                connection = (HttpURLConnection) requestUrl.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(8000);
                connection.setReadTimeout(8000);
                if (connection.getResponseCode() == 200) {
                    Map<String, List<String>> headers = connection.getHeaderFields();
                    for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
                        String key = entry.getKey();
                        List<String> values = entry.getValue();
                        for (String value : values) {
                            sb.append(key).append(": ").append(value).append("\n");
                        }
                    }
                    InputStream in = connection.getInputStream();
                    reader = new BufferedReader(new InputStreamReader(in));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    System.out.println(sb);

                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    reader.close();
                }
                if (connection != null) {
                    connection.disconnect();
                }
            }
            return sb.toString();
        }
    });
    new Thread(task).start();
    String s = null;
    try {
        s = task.get();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return s;
}

在修改后的代码中,我添加了以下部分来获取响应头字段:

Map<String, List<String>> headers = connection.getHeaderFields();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
    String key = entry.getKey();
    List<String> values = entry.getValue();
    for (String value : values) {
        sb.append(key).append(": ").append(value).append("\n");
    }
}

这样,sb中就会包含完整的返回内容,从响应头开始。你可以根据需要对返回内容进行进一步处理或打印。