Введение
Класс HttpURLConnection
из пакета java.net
может быть использован для отправки HTTP-запросов на Java программно. В этой статье вы узнаете, как использовать HttpURLConnection
в программе на Java для отправки запросов GET
и POST
, а затем распечатать ответ.
Предварительные условия
Для этого примера использования HttpURLConnection
вы должны быть знакомы с учебником Spring MVC, потому что в нем содержатся URL-адреса для методов HTTP GET
и POST
.
Рассмотрите возможность развертывания на локальный сервер localhost
Tomcat.
Обзор примера SpringMVCExample
Запрос HTTP GET на Java
localhost:8080/SpringMVCExample/
Запрос HTTP GET на страницу входа
localhost:8080/SpringMVCExample/login
Запрос HTTP 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-запросов на Java с использованием класса HttpURLConnection
:
- Создайте объект
URL
из строки URL-адреса дляGET
или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) { // успех
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// печать результата
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);
// Только для POST - НАЧАЛО
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// Только для POST - КОНЕЦ
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // успех
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// печать результата
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.