Как использовать Java HttpURLConnection для запросов HTTP GET и POST
Введение
Класс HttpURLConnection
из пакета java.net
можно использовать для отправки HTTP-запроса Java программным путем. В этой статье вы узнаете, как использовать HttpURLConnection
в программе Java для отправки запросов GET
и POST
, а затем печатать ответ.
Предпосылки
Для этого примера HttpURLConnection
вы должны были выполнить учебник Spring MVC, поскольку в нем есть URL-адреса для HTTP-методов GET
и POST
.
Рассмотрите возможность развертывания на сервере localhost
Tomcat.
Резюме SpringMVCExample
GET-запрос Java HTTP
localhost:8080/SpringMVCExample/
Java HTTP GET Запрос на страницу входа
localhost:8080/SpringMVCExample/логин
POST-запрос Java HTTP
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>
метод
— этоPOST
.action
home
.localhost:8080/SpringMVCExample/home
Вы можете создать запрос
POST
для:localhost:8080/SpringMVCExample/home?userName=Pankaj
Это послужит основой для примера
HttpURLConnection
.Пример HttpURLConnection
Вот шаги для отправки HTTP-запросов Java с использованием класса
HttpURLConnection
:- Создайте объект
URL
из строки URLGET
илиPOST
. - Вызовите метод
openConnection()
для объекта URL, который возвращает экземплярHttpURLConnection
. - Установите метод запроса в экземпляре
HttpURLConnection
(значение по умолчанию —GET
). - Вызовите метод
setRequestProperty()
для экземпляраHttpURLConnection
, чтобы установить значения заголовка запроса (например,User-Agent
,Accept-Language
и т. д.). - Мы можем вызвать
getResponseCode()
, чтобы получить HTTP-код ответа. Таким образом, мы узнаем, был ли успешно обработан запрос и было ли выдано какое-либо сообщение об ошибке HTTP. - Для
GET
используйтеReader
иInputStream
, чтобы прочитать ответ и соответствующим образом обработать его. - Для
POST
, прежде чем код обработает ответ, он должен получитьOutputStream
из экземпляраHttpURLConnection
и написатьPOST
параметры в него.
Вот пример программы, которая использует
HttpURLConnection
для отправки Java-запросов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."); } } }
Скомпилируйте и запустите код. Он выдаст следующий результат:
OutputGET 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, вам нужно использоватьjavax.net.ssl.HttpsURLConnection
вместоjava.net.HttpURLConnection
.HttpsURLConnection
будет обрабатывать SSL-подтверждение и шифрование.Заключение
В этой статье вы узнали, как использовать
HttpURLConnection
в программе Java для отправки запросовGET
иPOST
, а затем печатать ответ.Продолжите свое обучение с помощью дополнительных руководств по Java.