Избранное | Русский | Войти

Использование java.net

Чтобы устанавливать HTTP- и HTTPS-соединения из приложения Java, можно использовать класс java.net.URLConnection из стандартной библиотеки Java. App Engine реализует этот интерфейс с помощью службы получения данных по URL.

Дополнительную информацию о java.net можно найти в документации по java.net.URLConnection от Sun.

Простые запросы с URL

Проще всего получить содержание страницы по URL, создав объект java.net.URL и вызвав метод openStream(). Этот метод обрабатывает создание соединения, выполнение запроса HTTP GET и получение данных ответа.

import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

// ...
        try {
            URL url = new URL("http://www.example.com/atom.xml");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;

            while ((line = reader.readLine()) != null) {
                // ...
            }
            reader.close();

        } catch (MalformedURLException e) {
            // ...
        } catch (IOException e) {
            // ...
        }

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

Для более сложных запросов можно вызывать метод openConnection() объекта URL, чтобы получить объект URLConnection (HttpURLConnection или HttpsURLConnection в зависимости от URL). До выполнения запроса в этот объект можно добавить дополнительные сведения. Чтобы выполнить запрос, вызовите метод для объекта URLConnection, например, getInputStream() или getOutputStream().

Реализация URLConnection App Engine не поддерживает постоянное соединение с удаленным хостом. Когда приложение указывает данные запроса или производит запись в выходной поток, данные запроса остаются в памяти. Когда оно осуществляет доступ к данным ответа, например, получает входной поток (или вызывает метод connect()), App Engine вызывает службу получения данных по URL с данными запроса, получает ответ, закрывает соединение и возвращает данные ответа.

Вот пример выполнения запроса HTTP POST на URL с данными формы:

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;

// ...
        String message = URLEncoder.encode("my message", "UTF-8");

        try {
            URL url = new URL("http://www.example.com/comment");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");

            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write("message=" + message);
            writer.close();
    
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                // OK
            } else {
                // Server returned HTTP error code.
            }
        } catch (MalformedURLException e) {
            // ...
        } catch (IOException e) {
            // ...
        }

Включение заголовков запросов

Чтобы в исходящий запрос включить HTTP-запрос, вызовите метод HttpURLConnection setRequestProperty().

        connection.setRequestProperty("X-MyApp-Version", "2.7.3");

Перенаправления

По умолчанию объект HttpURLConnection поддерживает перенаправления по HTTP. Служба получения данных по URL поддерживает до пяти перенаправлений.

Чтобы отключить перенаправления, вызовите метод HttpURLConnection setFollowRedirects():

        connection.setFollowRedirects(false);

Неподдерживаемые функции java.net

Служба получения данных по URL не поддерживает постоянные HTTP-соединения. Когда приложение получает доступ к данным ответа с помощью объекта URLConnection, чтобы завершить запрос, App Engine вызывает службу получения данных по URL. После того, как к данным ответа получен доступ, они не могут быть изменены.

Для запроса приложение не может явно задать время ожидания соединения.

Функции низкоуровневого API

Служба получения данных по URL устанавливает ограничения на размер данных для исходящего запроса и входящего ответа. При использовании API java.net данные сверх этого ограничения просто будут опущены. Низкоуровневый API получения данных по URL позволит указать, будет ли в этом случае возникать исключение.