Поиск…


замечания

  • Использование HttpUrlConnection на Android требует, чтобы вы добавили разрешение на доступ в Интернет для своего приложения (в AndroidManifest.xml ).

  • Существуют также другие Java-HTTP-клиенты и библиотеки, такие как OkHttp Square, которые более удобны в использовании и могут обеспечить лучшую производительность или больше возможностей.

Получить тело ответа из URL-адреса в виде строки

String getText(String url) throws IOException {
    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    //add headers to the connection, or check the status if desired..
    
    // handle error response code it occurs
    int responseCode = conn.getResponseCode();
    InputStream inputStream;
    if (200 <= responseCode && responseCode <= 299) {
        inputStream = connection.getInputStream();
    } else {
        inputStream = connection.getErrorStream();
    }

    BufferedReader in = new BufferedReader(
        new InputStreamReader(
            inputStream));

    StringBuilder response = new StringBuilder();
    String currentLine;

    while ((currentLine = in.readLine()) != null) 
        response.append(currentLine);

    in.close();

    return response.toString();
}

Это будет загружать текстовые данные из указанного URL-адреса и возвращать их как строку.

Как это работает:

  • Во-первых, мы создаем HttpUrlConnection из нашего URL-адреса с new URL(url).openConnection() . Мы UrlConnection это возвращает HttpUrlConnection , поэтому у нас есть доступ к таким вещам, как добавление заголовков (например, User Agent) или проверка кода ответа. (Этот пример не делает этого, но его легко добавить.)

  • Затем создайте InputStream на основе кода ответа (для обработки ошибок)

  • Затем создайте BufferedReader который позволяет нам читать текст из InputStream мы получаем из соединения.

  • Теперь мы добавляем текст в StringBuilder последовательно.

  • Закройте InputStream и верните строку, которую мы теперь имеем.

Заметки:

  • Этот метод будет генерировать IoException в случае сбоя (например, сетевую ошибку или отсутствие подключения к Интернету), а также исключить исключение MalformedUrlException если данный URL-адрес недействителен.

  • Его можно использовать для чтения с любого URL-адреса, который возвращает текст, например веб-страницы (HTML), API REST, которые возвращают JSON или XML и т. Д.

  • См. Также: Прочитать URL-адрес строки в нескольких строках кода Java .

Использование:

Очень просто:

String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.

Данные POST

public static void post(String url, byte [] data, String contentType) throws IOException {
    HttpURLConnection connection = null;
    OutputStream out = null;
    InputStream in = null;

    try {
        connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestProperty("Content-Type", contentType);
        connection.setDoOutput(true);

        out = connection.getOutputStream();
        out.write(data);
        out.close();

        in = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        in.close();

    } finally {
        if (connection != null) connection.disconnect();
        if (out != null) out.close();
        if (in != null) in.close();
    }
}

Это будет POST-данных для указанного URL-адреса, а затем прочитайте ответ по очереди.

Как это устроено

  • Как обычно, мы получаем HttpURLConnection из URL .
  • Задайте тип содержимого с помощью setRequestProperty , по умолчанию это application/x-www-form-urlencoded
  • setDoOutput(true) сообщает подключению, что мы будем отправлять данные.
  • Затем мы получаем OutputStream , вызывая getOutputStream() и записывая данные на него. Не забудьте закрыть его после завершения.
  • Наконец, мы читаем ответ сервера.

Удалить ресурс

   public static void delete (String urlString, String contentType) throws IOException {
        HttpURLConnection connection = null;
    
        try {
            URL url = new URL(urlString);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setRequestMethod("DELETE");
            connection.setRequestProperty("Content-Type", contentType);
    
            Map<String, List<String>> map = connection.getHeaderFields();
            StringBuilder sb = new StringBuilder();
            Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
            while(iterator.hasNext())
            {
                Map.Entry<String, String> entry = iterator.next();
                sb.append(entry.getKey());
                sb.append('=').append('"');
                sb.append(entry.getValue());
                sb.append('"');
                if(iterator.hasNext())
                {
                    sb.append(',').append(' ');
                }
            }
            System.out.println(sb.toString());
    
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) connection.disconnect();
        }
    }

Это УДАЛИТЬ ресурс в указанном URL-адресе, а затем распечатает заголовок ответа.

Как это устроено

  • мы получаем HttpURLConnection из URL .
  • Задайте тип содержимого с помощью setRequestProperty , по умолчанию это application/x-www-form-urlencoded
  • setDoInput(true) сообщает о соединении, которое мы намерены использовать для ввода URL-адреса.
  • setRequestMethod("DELETE") для выполнения HTTP DELETE

Наконец, мы печатаем заголовок ответа сервера.

Проверьте, существует ли ресурс

/**
 * Checks if a resource exists by sending a HEAD-Request.
 * @param url The url of a resource which has to be checked.
 * @return true if the response code is 200 OK.
 */
public static final boolean checkIfResourceExists(URL url) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("HEAD");
    int code = conn.getResponseCode();
    conn.disconnect();
    return code == 200;
}

Объяснение:

Если вы просто проверяете, существует ли ресурс, лучше использовать запрос HEAD, чем GET. Это позволяет избежать накладных расходов на передачу ресурса.

Обратите внимание, что метод возвращает true если код ответа 200 . Если вы ожидаете ответа на перенаправление (т. Е. 3XX), то, возможно, этот способ может быть усилен для их соблюдения.

Пример:

checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow