Объясните задачу, так как являюсь еще новичком в Java, не могу понять суть задачи. Прочитал про HttpURLConnection и немного поработал с его методами и сделал get, put запросы.
Задача:
Напишите программу, которая с консоли считывает поисковый запрос, и выводит результат поиска по Википедии. Задача разбивается на 4 этапа:
Считать запрос
Сделать запрос к серверу
Распарсить ответ
Вывести результат
Первый и четвертый пункт не сильно нуждаются в пояснении, остановимся на запросе к серверу.
Эту задачу тоже можно разбить на несколько этапов:
Генерация запроса
Запрос к серверу
Подготовка к обработке ответа
Обработка ответа
Рассмотрим это подробнее:
Генерация запроса
API предоставляет возможность делать поисковые запросы, без ключей. Вот таким, примерно, образом:
Вы можете открыть эту ссылку в браузере, и посмотреть на результат запроса.
Однако, чтобы запрос прошел удачно, следует убрать из ссылки недопустимые символы, то есть сделать Percent-encoding, он же URL Encoding.
Для этого в Java можно воспользоваться статическим методом encode в классе URLEncoder, вот так:
street = URLEncoder.encode(street, "UTF-8");
Вот и всё, URL готов! Осталось теперь сделать запрос к серверу…
Запрос к серверу
Для GET и POST запросов можно воспользоваться классом HttpURLConnection. Это самое простое. Просто создать, открыть соединение и получить InputStream. Нам его даже не надо читать, за нас это сделает Gson.
Ещё можно использовать retrofit, или что-то подобное.
Подготовка к обработке ответа
Сервер возвращает данные в формате JSON.
Но нам его не надо парсить вручную, для этого есть библиотека Gson от Google.
Примеры есть тут:
https://github.com/google/gson
https://habrahabr.ru/company/naumen/blog/228279/
Если остаётся время, можно написать получение статьи, выбранной при поиске и так далее.
То есть я сделал такой get запрос, а дальше что?
String urlAddress = "https://ru.wikipedia.org/w/api.php?action=query&list=search&utf8=&format=json&srsearch=\"Java\"";
HttpURLConnection connection = null;
URL url = null;
InputStreamReader isR = null;
BufferedReader bfR = null;
try {
url = new URL(urlAddress);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(200);
connection.setReadTimeout(200);
connection.connect();
if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
isR = new InputStreamReader(connection.getInputStream());
bfR = new BufferedReader(isR);
String line;
while ((line = bfR.readLine()) != null) {
System.out.println(line);
}
} else {
System.out.printf("Fail %s", connection.getResponseCode());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
isR.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bfR.close();
} catch (IOException e) {
e.printStackTrace();
}
}