Автор оригинала: Pankaj Kumar.
HttpURLConnection класс из java.net пакет можно использовать для отправки HTTP-запроса Java программным способом. Сегодня мы узнаем, как использовать HttpURLConnection в java-программе для отправки ПОЛУЧЕНИЯ и ОТПРАВКИ запросов, а затем печати ответа.
HTTP-запрос Java
Для нашего примера HttpURLConnection я использую пример проекта из учебника Spring MVC, потому что в нем есть URL-адреса для методов GET и POST HTTP. Ниже приведены изображения этого веб-приложения, я развернул его на своем локальном сервере tomcat.
Запрос Java HTTP GET
Java HTTP-запрос на получение страницы входа
Запрос Java HTTP POST
Для запросов Java HTTP GET у нас есть вся информация в самом URL-адресе браузера. Итак, из приведенных выше изображений мы знаем, что у нас есть следующие URL-адреса запросов на получение.
- https://localhost:9090/SpringMVCExample/
- https://localhost:9090/SpringMVCExample/login
Приведенные выше URL-адреса не имеют никаких параметров, но, как мы знаем, в HTTP-запросах GET параметры являются частью самого URL-адреса, поэтому, например, если нам нужно отправить параметр с именем Имя пользователя со значением Pankaj , то URL-адреса были бы такими, как показано ниже.
- https://localhost:9090/SpringMVCExample?userName=Pankaj
- https://localhost:9090/SpringMVCExample/login?userName=Pankaj&pwd=apple123 – для нескольких параметров
Если мы знаем URL-адрес ПУБЛИКАЦИИ и какие параметры она ожидает, это потрясающе, но в этом случае мы выясним это из источника формы входа.
Ниже приведен HTML-код, который мы получаем при просмотре источника страницы входа в систему в любом из браузеров.
Login Page
Посмотрите на метод формы в источнике, как и ожидалось, это метод POST. Теперь посмотрите, что действие “домой”, поэтому URL-адрес СООБЩЕНИЯ будет https://localhost:9090/SpringMVCExample/home . Теперь проверьте различные элементы в форме, из приведенной выше формы мы можем сделать вывод, что нам нужно отправить один параметр POST с именем Имя пользователя и он имеет тип String.
Итак, теперь у нас есть полная информация о запросах GET и POST, и мы можем приступить к программе примера HTTP-запроса Java.
Ниже приведены шаги, которые нам необходимо выполнить для отправки HTTP-запросов Java с помощью HttpURLConnection класс.
- Создайте
URLобъект из строки URL-адреса GET/POST. - Вызовите метод openConnection() для объекта URL, который возвращает экземпляр
HttpURLConnection - Задайте метод запроса в
HttpURLConnectionэкземпляр, значение по умолчанию-GET. - Вызовите метод setRequestProperty() на
Экземпляр HttpURLConnectionдля установки значений заголовка запроса, таких как “Агент пользователя” и “Язык принятия” и т.д. - Мы можем вызвать
getResponseCode (), чтобы получить HTTP-код ответа. Таким образом, мы узнаем, был ли запрос успешно обработан или было выдано какое-либо сообщение об ошибке HTTP. - Забудьте, мы можем просто использовать Reader и InputStream, чтобы прочитать ответ и обработать его соответствующим образом.
- Для СООБЩЕНИЯ, прежде чем мы прочитаем ответ, нам нужно получить поток вывода из
Экземпляр HttpURLConnectionи запишите в него параметры POST.
Пример подключения HttpURLConnection
На основе вышеуказанных шагов ниже приведен пример программы, демонстрирующей использование HttpURLConnection для отправки запросов Java GET и POST.
HttpURLConnectionExample.java код:
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 not worked");
}
}
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 not worked");
}
}
}
Когда мы выполняем вышеуказанную программу, мы получаем ответ ниже.
GET Response Code :: 200Home Hello world!
The time on the server is March 6, 2015 9:31:04 PM IST.
GET DONE POST Response Code :: 200User Home Page Hi Pankaj
POST DONE
Просто сравните его с HTTP-ответом браузера, и вы увидите, что он такой же. Вы также можете сохранить ответ в любой HTML-файл и открыть его, чтобы визуально сравнить ответы.
Быстрый совет : Если вам нужно отправлять запросы GET/POST по протоколу HTTPS, все, что вам нужно, это использовать javax.net.ssl.HttpsURLConnection вместо java.net.HttpURLConnection . В остальном все шаги будут такими же, как и выше, HttpsURLConnection позаботится о SSL-квитировании и шифровании.