С помощью класса HttpURLConnection из пакета java.net можно программным путем отправлять HTTP-запросы в Java. В этом мануале вы узнаете, как с помощью HttpURLConnection в Java-программе отправлять запросы GET и POST, а затем выводить ответ.
Требования
Рассмотрите возможность развертывания localhost Tomcat-сервера.
Краткое описание SpringMVCExample
Читайте также: Основы работы Spring: аннотация @Configuration
GET-запрос в Java:
- localhost:8080/SpringMVCExample/
HTTP-запрос GET в Java для страницы входа в систему
- localhost: 8080/SpringMVCExample/login
POST-запрос в Java
- localhost:8080/SpringMVCExample?userName=Pankaj
- localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123 — для нескольких параметров
Извлечение параметров из формы
HTML страница входа содержит следующую форму:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Login Page</title> </head> <body> <form action="home" method="post"> <input type="text" name="userName"><br> <input type="submit" value="Login"> </form> </body> </html>
Где:
- method — POST.
- action — home.
- localhost: 8080/SpringMVCExample/home
- У userName тип text.
Мы можем создать POST-запрос для:
localhost:8080/SpringMVCExample/home?userName=Pankaj
Это будет основой для примера HttpURLConnection.
Пример HttpURLConnection
Ниже описаны шаги по отправке HTTP-запросов с помощью класса HttpURLConnection:
- Создайте URL объект из URL-строки GET или POST.
- Для URL объекта вызовите метод openConnection(), который возвращает экземпляр HttpURLConnection.
- Установите метод запроса в экземпляре HttpURLConnection (значение по умолчанию — GET).
- Вызовите метод setRequestProperty() для экземпляра HttpURLConnection, чтобы установить значения заголовков запроса (например, “User-Agent”, “Accept-Language” и т. д.).
- Для получения HTTP-кода ответа можно вызвать getResponseCode(). Так мы узнаем, был ли запрос успешно обработан или возникла ошибка HTTP.
- Для GET с помощью Reader и InputStream нужно прочитать ответ и обработать его соответствующим образом.
- Запрос POST, прежде чем код обработает ответ, должен получить OutputStream из экземпляра HttpURLConnection и записать в него параметры POST.
Пример программы, которая с помощью HttpURLConnection отправляет запросы GET и POST:
package com.journaldev.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpURLConnectionExample { private static final String USER_AGENT = "Mozilla/5.0"; private static final String GET_URL = "https://localhost:9090/SpringMVCExample"; private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home"; private static final String POST_PARAMS = "userName=Pankaj"; public static void main(String[] args) throws IOException { sendGET(); System.out.println("GET DONE"); sendPOST(); System.out.println("POST DONE"); } private static void sendGET() throws IOException { URL obj = new URL(GET_URL); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("User-Agent", USER_AGENT); int responseCode = con.getResponseCode(); System.out.println("GET Response Code :: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { // success BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // print result System.out.println(response.toString()); } else { System.out.println("GET request did not work."); } } private static void sendPOST() throws IOException { URL obj = new URL(POST_URL); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", USER_AGENT); // For POST only - START con.setDoOutput(true); OutputStream os = con.getOutputStream(); os.write(POST_PARAMS.getBytes()); os.flush(); os.close(); // For POST only - END int responseCode = con.getResponseCode(); System.out.println("POST Response Code :: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { //success BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // print result System.out.println(response.toString()); } else { System.out.println("POST request did not work."); } } }
Скомпилируйте и запустите код. Он выдаст такой результат:
GET Response Code :: 200 <html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2015 9:31:04 PM IST. </P></body></html> GET DONE POST Response Code :: 200 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj</h3></body></html> POST DONE
Сравните этот вывод с HTTP-ответом браузера.
Если нужно отправлять запросы GET и POST по протоколу HTTPS, то вместо java.net.HttpURLConnection нужно использовать javax.net.ssl.HttpsURLConnection. HttpsURLConnection будет обрабатывать SSL рукопожатия и шифрование.
Подводим итоги
В этом мануале мы разобрали, как в программе Java с помощью HttpURLConnection отправлять запросы GET и POST, а затем выводить ответ.